Singleton模式解决的是实体对象个数的问题。
除了Singleton之外,其他创建型模式解决的都是New所带来的耦合关系。
Factory Method,Abstract Factory,Builder都需要一个额外的工厂类来负责实例化“易变对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
如果遇到“易变类”,起初的设计通常从Factory Method开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(Abstract Factory,Builder,Prototype)
适用性:
一、Abstract Factory:
1、一个系统要独立于它的产品的创建、组合和表示时。
2、一个系统要由多个产品系列中的一个配置时。
3、当要强调一系列相关的产品对象的设计以便进行联合使用时。
4、当提供一个产品类库,而只是显示它们的接口而不是实现时。
二、Builder:
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。
三、Factory Method:
1、当一个类不知道它所必须创建的对象的类的时候。
2、当一个类希望由它的子类来指定它所创建的对象的时候
3、当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这以信息局部化的时候。
四、Prototype:
1、当要实例化的类是运行时刻指定时。
2、为了避免创建一个与产品类层次平行的工厂类层次时。
3、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用何时的状态手工实例化该类更方面一些。
五、Singleton:
1、当类只能有一个实例而且客户可以从一个总所周知的访问点访问它时。
2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
参考资料:
《可复用面向对象软件基础》