创建型模式总结

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

 

一、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模式的复杂版本。在上图中,如果将ConcreteFactory1ConcreteFactory2去掉,那么就和Factory Method模式是一样的了;

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

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

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

 

四、Abstract Factory模式

要点:

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模式

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相对特别一些。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值