天天看点

[翻译]创建型设计模式

在软件工程中,创建型设计模式用于在不同的软件开发情境下以合适的方式创建类的对象实例。采用基本的对象实例生成方式(而不用设计模式)会造成软件设计问题或者给软件设计增加复杂性,相比之下,创建型设计模式通过采用某种方法控制对象生成的方式来解决基本对象生成方式遇到的问题。

  • 抽象工厂模式(Abstract Factory)

该模式用于创建多个类似类型的实例对象。

  • 生成器模式(builder)

该模式将对象的创建过程从对象的表示中分离。

  • 工厂模式(Factory Method)

该模式用于创建多个子类的实例对象。

  • 对象池模式(Object Pool)

该模式通过回收利用不再使用的对象,避免过多的获取和释放动作耗费昂贵的资源。

  • 原型模式(Prototype)

该模式用于复制或者克隆一个初始化过的实例对象。

  • 单件模式(Singleton)

该模式用于创建只存在一个实例对象的类型。

经验法则

1)创建型设计模式可以相互替代,比如在一些软件开发案例中采用原型模式或者抽象工厂模式都适用。创建型设计模式也可以相互补充,比如抽象工厂模式内部存储一系列原型,然后复制原型以创建产品对象;生成器模式内部使用其它创建型设计模式来实现对象实例的创建;抽象工厂模式、生成器模式和原型模式的代码实现中可以采用单件模式。

2)抽象工厂模式、生成器模式和原型模式都定义了工厂对象实例,该对象实例是应用程序的一部分,负责创建应用程序中需要的产品对象实例。与抽象工厂模式相关的工厂对象可以创建由不同的类组合而成的产品对象;与生成器模式相关的工厂对象采用复杂的协议逐步生成一个复杂的产品对象;与原型模式相关的工厂对象通过复制已经存在的原型来生成产品对象。

3)抽象工厂类可以由工厂模式实现,也可以采用原型模式实现。

4)抽象工厂模式可以替代外观模式来隐藏与具体软件平台(获取其它平台,比如CPU等)相关的类。

5)生成器模式侧重于逐步创建一个复杂的对象;抽象工厂侧重于创建一个系列的产品对象(不管是负责的对象还是简单的对象都适用)。生成器模式的最后一步是返回生成的产品对象,而抽象模式则立即返回需要的产品对象。

6)程序中涉及对象创建的操作通常由生成器模式实现,就如同封装算法的实现时会使用策略模式。

7)生成器模式的实现通常会包含组合模式(Composite)。

8)模板模式的代码实现通常会包含工厂模式。

9)工厂模式:通过继承方式创建对象。原型模式:通过代理方式创建对象。

10)软件设计之初,常采用工厂模式(该模式实现简单,定制性强,可通过创建新子类以生成新对象)。随着设计的深入,设计人员认为程序应该设计的更加灵活时,就会采用抽象工厂模式、原型模式或者生成器模式(这些模式更灵活,代码实现也更复杂)。

11)原型模式不要求代码中存在子类,但是要求有初始化操作。相反,工厂模式需要代码中有子类,但是不需要初始化操作。

12)如果软件设计严重依赖组成模式和装饰模式,也可以参考原型模式来提高软件设计质量。

原文地址:http://sourcemaking.com/design_patterns/creational_patterns