一、简单工厂模式
通过专门定义一个类来负责其他类的实例,被创建的实例通常有公同的父类。
1、包含的角色及其职责
(1)工厂角色
简单工厂模式的核心,它负责创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
(2)抽象角色
简单工厂模式创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
(3)具体产品角色
简单工厂模式所创建的具体实例对象。
2、简单工厂模式的优缺点
在这个模式中,工厂类是整个模式的关键所在。它包含必要的逻辑判断,能够根据外界所给定的信息,决定应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建及如何组织的。有利于整个软件体系结构的优化。简单工厂模式的缺点也体现在其工厂的类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做得并不好。另外,当系统中的具体产品类目不断增多时,可能出现要求工厂类也做相应修改,扩展性不好。
二、工厂模式
1、概念
工厂方法同属于类的创建模式,又被称为多态工厂模式。工厂模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
核心工厂类不再负责产品的创建,这样核心类称为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
2、模式中的角色及其职责
(1)抽象工厂角色:
工厂方法模式的核心,任何工厂类都必须实现这个接口
(2)具体工厂角色:
具体工厂类是抽象工厂的一个实现,负责实例化产品对象
(3)抽象角色:
工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口
(4)具体产品角色:
工厂方法模式创建的具体实例对象
3、工厂模式和简单工厂模式对比
结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体类都有共同的接口,或者共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象, 原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放--封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变为简单工厂模式。
三、抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。
1、模式中包含的角色及其职责
(1)抽象工厂(Creator)角色
抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。
(2)具体工厂( Concrete Creator)角色
具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。
(3)抽象(Product)角色
抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
(4)具体产品(Concrete Product)角色
抽象模式所创建的具体实例对象
三种工厂模式的比较:
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
四、建造者模式
1、模式中包含的角色及其职责
(1)Builder:为创建产品各个部分,统一抽象接口。
(2) ConcreteBuilder:具体的创建产品的各个部分,部分A, 部分B,部分C。
(3) Director:构造一个使用Builder接口的对象。
(4) Product:表示被构造的复杂对象。
ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。