创建型模式包括:
工厂方法模式:提供一个简单的决策类,根据条件生成产品。
抽象工厂模式:提供一个创建并返回一系列产品的接口。
单例模式:某个类只能有一个实例。提供一个全局访问点。(可拓展到有限个实例)
建造者模式:将一个复杂对象的构建于呈现分开,以便根据不同需要创建不同的形式。
原型模式:先实例化一个类,然后克隆或者拷贝该类来构建新的实例。可以用共有方法进一步修改这些实例。
比较&总结:
用一个系统创建的那些对象的类对系统进行参数化要有两种常用方式。一种是生成创建对象的类的子类;这对应于是有Factory Method模式。这种方法的主要缺点是:仅为了改变产品类,就可能需要创建一个新的子类。这样的改变可能是 级联的(Cascade)。例如,如果产品的创建者本身是由一个工厂方法创建的,那么你也必须重定义它的创建者。
另一种对系统进行参数化的方法,更多的依赖于对象的复合:定义一个对象负责明确产品对象的类,并将它作为系统的参数。这是Abstract Factory、Builder、Prototype模式的关键特征。所有的这三个模式都涉及到创建一个新的负责创建产品对象的“工厂对象”。Abstract Factory由这个工厂对象产生更多类的对象。Builder由这个工厂对象使用一个相对复杂的协议,逐步创建一个复杂产品。Prototype由该工厂对象通过拷贝原型对象来创建产品对象。在这种情况下,因为原型负责返回产品对象,所有工厂对象和原型是同一个对象。
Factory Method使一个设计可以定制且只略显复杂。其他设计模式需要新的类,而Factory Method只需要一个新的操作。人们通常将Factory Method作为一种标准的创建对象的方法。但是当被实例化的类根本不发生变化或当实例化出现在子类可以很容易重定义的操作(比如在初始化操作中)中时,这就并不必要了。
使用Abstract Factory、Builder、Prototype的设计甚至比使用Factory Method的那些设计更灵活,但它们也更复杂。通常设计以使用Factory Method开始,并且当设计者发现需要更大的灵活性时,设计便会向其他创建型模式演化。当你在设计标准之间进行权衡时,了解多个模式可以给你提供更多的选择余地。