类图
代码
定义鼠标接口(产品A)
1 | interface IMouse{ |
定义键盘接口(产品B)
1 | interface IKeyboard{ |
戴尔鼠标实现(产品A实现者1)
1 | class DellMouseImpl implements IMouse{ |
惠普鼠标实现(产品A实现者2)
1 | class HpMouseImpl implements IMouse{ |
戴尔键盘实现(产品B实现者1)
1 | class HpKeyboardImpl implements IKeyboard { |
惠普键盘实现(产品B实现者2)
1 | class DellKeyboardImpl implements IKeyboard{ |
定义工厂接口
1 | interface IFactory{ |
戴尔工厂实现(工厂实现1)
1 | class DellFactoryImpl implements IFactory{ |
惠普工厂实现(工厂实现2)
1 | class HpFactoryImpl implements IFactory{ |
测试类
1 | class Client{ |
总结
概述
抽象工厂模式实际上与工厂方法模式最大的区别就是 多产品族
工厂方法模式整体围绕单产品(文中例子出现过的ISender)
抽象共产围绕多产品(IMouse, IKeyWord)
优点
能够向客户端提供单一接口,不指定产品类型的情况下,支持生产同一个系列的不同产品
通过dellFactory能够直接生产dell的鼠标、键盘
缺点
当产品族发生变更时,违反了开闭原则
抽象产品的开闭原则有倾向性,它对不同产品体系遵循开闭,对扩展产品族违反开闭
可以很方便的创建一个华硕工厂、苹果工厂
如果要生产显示器就非常不便了