1. 特点
(1)工厂类变成了抽象工厂(抽象类或接口),不再负责“生产“具体产品,而是把这个工作交给了具体工厂子类去做。(这一点与工厂方法模式相同)
(2)所有的产品之间是有关联的,构成一个产品族,产品族中包含不同的抽象产品类或产品接口。(3)一个具体工厂类负责“生产”对应的产品族中的所有产品。
(3)具体产品类继承抽象产品类或实现产品接口。(这一点与简单工厂模式相同)
(4)每个具体工厂类的工厂方法有多个,每一个对应不同的抽象产品类或产品接口,及其对应的所有具体产品类。
2. 优点
(1)产品使用者无需“生产”产品,只需“消费”产品。
(2)当需要增加产品时,产品使用者代码无需改变。
(3)当需要增加一个产品族时,只需要增加这个产品族的相关类以及对应的具体工厂子类,其它产品类和工厂类不受影响。
注:(1)(2)是所有工厂模式的共同的优点。
3. 缺点
(1)工厂方法是非静态的,产品使用者必须先创建(拥有)该工厂实例。
4. 典型应用场景
(1)不同平台的视窗构件(按钮、文本...)。
(2)苹果机和PC机的硬件构件(CPU、内存、...)。
参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏
没有评论:
发表评论