基本定义

抽象工厂模式提供一个接口,用户创建相关或者依赖对象的家族,而不需要明确指定具体类。

抽象工厂允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际产出的具体产品是什么,这样一来客户可以从具体的产品关系中解耦。

模式结构

AbstractFactory:抽象工厂。抽象工厂定义了一个接口,所有的具体工厂都必须实现此接口,这个接口包含了一组方法用来生产产品。

ConcreteFactory:具体工厂。具体工厂是用于生产不同产品族。要创建一个产品,客户只需要使用其中一个工厂完全不需要实例化任何产品对象。

AbstractProduct:抽象产品。这是一个产品家族,每一个具体工厂都能够生产一整组产品。

Product:具体产品。

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

模式实现

AbstractProductA 抽象产品类(电脑)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

ConcreteProductA1 具体产品类(华为电脑)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

ConcreteProductA2 具体产品类(苹果电脑)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

AbstractProductB 抽象产品类(手机)​​​​​​​

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

ConcreteProductB1 具体产品类(华为手机)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

ConcreteProductB2 具体产品类(苹果手机)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

AbstractFactory 抽象工厂类

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

ConcreteFactory 具体工厂类1(华为工厂)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

ConcreteFactory 具体工厂类2 (苹果工厂)

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

测试类

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

输出结果

23:19:12.427 [main] INFO com.yanyuan.gof.build.abstractFactory.v2.HuaweiPC - 使用华为电脑玩DOTA

23:19:12.459 [main] INFO com.yanyuan.gof.build.abstractFactory.v2.HuaweiPhone - 华为手机拨打西施电话

23:19:12.465 [main] INFO com.yanyuan.gof.build.abstractFactory.v2.ApplePC - 使用苹果电脑玩国际象棋

23:19:12.466 [main] INFO com.yanyuan.gof.build.abstractFactory.v2.IPhone - iPhone手机拨打程咬金电话

总结

抽象工厂模式中主要的优点在于具体类的隔离,是的客户端不需要知道什么被创建了。其缺点在于增加新的产品族比较复杂,需要修改接口及其所有子类。

工厂模式和抽象工厂模式主要区别在于产品,产品种类单一,适合工厂模式。抽象工厂模式适合用于创建多个产品种类,多个产品类型。

 
设计模式之抽象工厂模式(Abstract Factory Pattern)

相关文章: