创建型模式总结

创建型模式,一共有5个,即Singleton, Factory Method (变种Simple Factory)Abstract FactoryBuilderPrototype。分别总结如下:

 

一、Singleton模式

创建型模式总结_第1张图片

要点:

1.       构造方法是private的;

2.       有一个private的静态变量,其类型就是Singleton本身或者auto_ptr<T>,其中T是模板参数;

3.       有一个public的方法get_instance(),其返回类型是Singleton本身或者auto_ptr<T>

4.       必须注意get_instance()应当实现同步,以提供线程安全。 

5.       在创建型模式当中,它和Prototype相对比较特别。该模式限定了一个类只能拥有一个实例。

 

二、Simple Factory模式

创建型模式总结_第2张图片

要点:

1.       Simple Factory模式是Factory Method模式的简化版本;

2.       简单工厂类是控制中枢,它决定了返回哪个具体类。

 

三、Factory Method模式

创建型模式总结_第3张图片

要点:

1.       Factory Method模式是Simple Factory模式的复杂版本。在上图中,如果将ConcreteFactory1ConcreteFactory2去掉,那么就和Factory Method模式是一样的了;

2.       AbstractFactory不再具有控制逻辑,到底实例化那个具体的产品类(ConcreteProduct1, 2),被延迟到了具体工厂类(ConcreteFactory1, 2)

3.       Factory Method模式很好地解决了“单个对象”的需求变化;

4.       具体工厂和具体产品之间往往一一对应,但也不尽然。

 

四、Abstract Factory模式

创建型模式总结_第4张图片

要点:

1.       Abstract Factory模式是Factory Method模式的复杂版本。在上图中,如果将AbstractProductB及其派生的两个类ProductB1ProductB2去掉,在将右边的3个工厂类中的CreateProductB成员函数去掉,那么Abstract Factory模式就会退化成Factory Method模式;

2.       Factory Method一样,AbstractFactory不具有控制逻辑,到底构造何种具体产品,被延迟到由具体工厂类决定;

3.       Abstract Factory模式主要解决构造一系列相互依赖或相互协调的对象。相对Factory Method模式的解决“单个对象”的需求变化,Abstract Factory模式解决“系列相关对象”的需求变化。

 

五、Builder模式

创建型模式总结_第5张图片

1.       Builder模式在一定程度上可以理解为Factory Method模式和Abstract Factory模式的综合,并在此基础上增加了一些新的内容。之所以这么说,是因为:

a)         Builder模式和Factory Method模式一样,仅构造一个产品对象,只不过该产品比较复杂;

b)         Builder模式和Abstract Factory模式一样,在构建复杂产品对象的过程中,需要分别构造组成该复杂产品的各个部件;

c)         新增加的内容主要有两点:一个是增加一个Director,起到该模式和客户程序的接口的作用,另外一个就是产品的各个部件和产品之间的关系是组合的关系,而不再是如Abstract Factory中各产品之间的关联或者依赖的关系

2.       该模式适用于:复杂对象通常由各个部件组成,而各个部件经常面临着剧烈的变化,但是将这些部件组合在一起,进而形成一个复杂对象的算法是相对稳定的。

 

六、Prototype模式

创建型模式总结_第6张图片

要点:

1.       clone的方式构造新的对象,注意此处的clone必须是深clone,在不同的编程语言中,深clone的做法:

a)         Java中可以考虑使用序列化或者直接new一个新的子对象的方式来实现Deep Clone

b)         C++中一般采用直接new一个新的子对象的方法来实现Deep Clone

c)         C#中一般采用MemberwiseClone()方法、序列化方法或者直接用new一个新的子对象的方法来实现深Clone

2.       该模式主要适用于,对于同一个对象需要进行不同的操作,同时要求各操作之间互不影响;

3.       在创建型模式当中,该模式和Singleton相对特别一些。

 
转:http://patmusing.blog.163.com/blog/static/1358349602010023133350/

你可能感兴趣的:(java,编程,算法,prototype,C#,产品)