Java中的工厂模式(2)

2014-11-24 03:03:10 · 作者: · 浏览: 0

上面已经引入了抽象工厂这一概念,我们有了基础,就可以考虑一下稍微复杂一点的业务了。

比如说:现在工厂不再把单个的产品当做操作原子了,而是针对一系列产品了。如果客户想换一套产品,只需要换一个工厂即可。比如说:换主题功能。

于是,我们可以对原有的抽象工厂进行一下小小的扩展。

比如说:

一个工厂生产一系列的产品包括:AK47,Apple,Car

另一工厂生产一系列的产品包括:MagicStick,MushRoom,Broom

则:

我们先把产品抽象为Weapon,Food,Vehicle,它们做为一个整体,有两套实现。

然后就有一个抽象工厂,它负责生产,这样就有了:createWeapon,createFood,createVehicle的三个抽象方法

两个实现工厂,DefaultFactory和MagicFactory。

代码如下:

public abstract class Weapon {

public abstract void shoot();

}

public abstract class Food {

public abstract void bite();

}

public abstract class Vehicle {

public abstract void run();

}

public class AK47 extends Weapon{

public void shoot(){

System.out.println("with AK47");

}

}

public class Apple extends Food {

public void bite(){

System.out.println("with apple");

}

}

public class Car extends Vehicle{

public void run(){

System.out.println("with Car");

}

}

Magic的产品我就省略不写了

public abstract class AbstractFactory {

public abstract Vehicle createVehicle();

public abstract Weapon createWeapon();

public abstract Food createFood();

}

public class DefaultFactory extends AbstractFactory{

@Override

public Food createFood() {

return new Apple();

}

@Override

public Vehicle createVehicle() {

return new Car();

}

@Override

public Weapon createWeapon() {

return new AK47();

}

}

MagicFactory我就省略了

测试:

public static void main(String[] args) {

/*AbstractFactory f = new DefaultFactory();*/

AbstractFactory f = new MagicFactory();

Weapon ak = f.createWeapon();

ak.shoot();

Food ap = f.createFood();

ap.bite();

Vehicle car = f.createVehicle();

car.run();

}

好了,这就是工厂模式了,其实个人感觉,也是一种特殊的准代理模式,代理的是生产而已。

摘自:漂泊小七专栏