本文首发于 http://www.YoungZY.com/
原文网址:Creational Patterns
在软件工程领域,创建型设计模式是用来处理对象创建机制的模式——在特定场景下用更合适的方式去创建对象。原始的对象创建方式(如Java的new
)可能会导致设计问题或者增加设计的复杂度。创建型设计模式通过控制对象的创建在一定程度上解决了这个问题。
- 抽象工厂模式
为一簇(类似的)对象创建实例 - 构造器模式
将对象的构造与其(输出)形式分离 - 工厂方法模式
为衍生类(子类)创建实例 - 对象池模式
通过回收不再使用的对象来避免高昂资源的获取和释放 - 原型模式
一个等着复制或者克隆的完全初始化的实例 - 单例模式
一个类只能存在一个实例
经验法则
- 有时候创建型设计模式之间有竞争关系:有些场景,原型模式和抽象工厂模式都可以很好地解决;有时候它们又是互补的:抽象工厂模式会用原型模式来存放将要返回的对象;构造器模式可以使用其他的模式去构造组件;抽象工厂模式、构造器模式、原型模式在实现的过程中可以使用单例模式。
- 抽象工厂模式、构造器模式、原型模式定义了一个工厂对象,用来创建对象实例,并且提供入参来实现不同的行为。抽象工厂模式的工厂对象用来创建不同对象的实例。构造器模式的工厂对象根据相应的复杂的协议逐步地构建一个复杂的对象。原型模式的工厂对象通过复制原型对象的方式构建对象。
- 抽象工厂模式通常使用工厂方法模式来实现,但也有用原型模式实现的。
- 抽象工厂模式在隐藏平台特定的类方面可以作为门面模式的替代品。
- 构造器模式专注于一步步地构建复杂的对象。抽象工厂模式着重于一组相似的对象(简单或复杂的)。构造器模式在最后一步完成对象的组装并返回,而抽象工厂模式会立即返回对象。
- 构造器模式是一种构建过程,策略模式是一种算法。
- 构造器模式通常构成了组合模式。
- 工厂方法模式通常在模板方法模式中被使用。
- 工厂方法模式使用继承创建对象;原型模式通过委托创建对象。
- 通常,设计是从工厂方法模式开始,因为它简单、可定制化、子类可扩展。当需要更多灵活性时,就逐步地向抽象工厂模式、原型模式和构造器模式转变和演化,因为他们更灵活,但也更复杂。
- 原型模式不需要子类,但一定要有初始化过程;工厂方法模式需要子类,但不一定有初始化过程。
- 大量使用了组合模式和装饰者模式的设计也可以使用原型模式。
加入讨论