ps:在以下讲述抽象工厂模式中,模仿的场景如下:我们有一个抽象工厂AbstractFactory,是用来创建生产不同产品族的工厂的。产品族中含有三种类型的产品,食物Food,交通工具Vehicle,武器Weapon。从类图中可以看出,AbstracFactory生产出了现代化工厂ModernFactory。然后对产品族具体化,食物具体为面包Bread,交通工具具体为汽车Car,武器具体为AK47,由这三种产品组成现代化的产品族。由现代化工厂ModernFactory来生产。若以后需要扩展其它的产品族,我们只需要利用抽象工厂AbstractFactory来创建生产此种产品族的工厂即可。类图和代码如下。
1、抽象工厂AbstractFactory
public abstract class AbstractFactory {
public abstract Food createFood();
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
}
2、抽象的产品族(食物Food,交通工具Vehicle,武器Weapon)
public abstract class Food {
public abstract void eat();
}
public abstract class Vehicle {
public abstract void go();
}
public abstract class Weapon {
public abstract void shoot();
}
3、具体化的产品族(面包Bread,汽车Car,武器AK47)
public class Bread extends Food {
@Override
public void eat() {
System.out.println("eat bread........");
}
}
public class Car extends Vehicle {
@Override
public void go() {
System.out.println("car is running");
}
}
public class AK47 extends Weapon {
@Override
public void shoot() {
System.out.println("AK47 tutututuutt......");
}
}
4、生产(面包Bread,汽车Car,武器AK)产品族的具体化工厂ModernFactory
public class ModernFactroy extends AbstractFactory {
//单例工厂
public static final ModernFactroy MODERN_FACTROY = new ModernFactroy();
private ModernFactroy(){};
@Override
public Food createFood() {
return new Bread();
}
@Override
public Vehicle createVehicle() {
return new Car();
}
@Override
public Weapon createWeapon() {
return new AK47();
}
}
5、Main(测试)
public class Main {
public static void main(String[] args) {
//获取生产具体产品族的工厂
AbstractFactory factory = ModernFactroy.MODERN_FACTROY;
factory.createVehicle().go();
factory.createFood().eat();
factory.createWeapon().shoot();
}
}
总结:抽象工厂模式根据具体的产品族来创建不同的工厂。