创建型模式,一共有5个,即Singleton, Factory Method (变种Simple Factory),Abstract Factory,Builder和Prototype。分别总结如下:
一、Singleton模式
要点:
1. 构造方法是private的;
2. 有一个private的静态变量,其类型就是Singleton本身或者auto_ptr<T>,其中T是模板参数;
3. 有一个public的方法get_instance(),其返回类型是Singleton本身或者auto_ptr<T>;
4. 必须注意get_instance()应当实现同步,以提供线程安全。
5. 在创建型模式当中,它和Prototype相对比较特别。该模式限定了一个类只能拥有一个实例。
二、Simple Factory模式
要点:
1. Simple Factory模式是Factory Method模式的简化版本;
2. 简单工厂类是控制中枢,它决定了返回哪个具体类。
三、Factory Method模式
要点:
1. Factory Method模式是Simple Factory模式的复杂版本。在上图中,如果将ConcreteFactory1和ConcreteFactory2去掉,那么就和Factory Method模式是一样的了;
2. AbstractFactory不再具有控制逻辑,到底实例化那个具体的产品类(ConcreteProduct1, 2),被延迟到了具体工厂类(ConcreteFactory1, 2);
3. Factory Method模式很好地解决了“单个对象”的需求变化;
4. 具体工厂和具体产品之间往往一一对应,但也不尽然。
四、Abstract Factory模式
要点:
1. Abstract Factory模式是Factory Method模式的复杂版本。在上图中,如果将AbstractProductB及其派生的两个类ProductB1和ProductB2去掉,在将右边的3个工厂类中的CreateProductB成员函数去掉,那么Abstract Factory模式就会退化成Factory Method模式;
2. 和Factory Method一样,AbstractFactory不具有控制逻辑,到底构造何种具体产品,被延迟到由具体工厂类决定;
3. Abstract Factory模式主要解决构造一系列相互依赖或相互协调的对象。相对Factory Method模式的解决“单个对象”的需求变化,Abstract Factory模式解决“系列相关对象”的需求变化。
五、Builder模式
1. Builder模式在一定程度上可以理解为Factory Method模式和Abstract Factory模式的综合,并在此基础上增加了一些新的内容。之所以这么说,是因为:
a) Builder模式和Factory Method模式一样,仅构造一个产品对象,只不过该产品比较复杂;
b) Builder模式和Abstract Factory模式一样,在构建复杂产品对象的过程中,需要分别构造组成该复杂产品的各个部件;
c) 新增加的内容主要有两点:一个是增加一个Director,起到该模式和客户程序的接口的作用,另外一个就是产品的各个部件和产品之间的关系是组合的关系,而不再是如Abstract Factory中各产品之间的关联或者依赖的关系
2. 该模式适用于:复杂对象通常由各个部件组成,而各个部件经常面临着剧烈的变化,但是将这些部件组合在一起,进而形成一个复杂对象的算法是相对稳定的。
六、Prototype模式
要点:
1. 以clone的方式构造新的对象,注意此处的clone必须是深clone,在不同的编程语言中,深clone的做法:
a) 在Java中可以考虑使用序列化或者直接new一个新的子对象的方式来实现Deep Clone;
b) 在C++中一般采用直接new一个新的子对象的方法来实现Deep Clone;
c) 在C#中一般采用MemberwiseClone()方法、序列化方法或者直接用new一个新的子对象的方法来实现深Clone。
2. 该模式主要适用于,对于同一个对象需要进行不同的操作,同时要求各操作之间互不影响;
3. 在创建型模式当中,该模式和Singleton相对特别一些。