内容来源:《设计模式-可复用面向对象软件基础》、网络。
本文主要是记录概念,加深理解,方便查阅。
AbstractFactory(抽象工厂)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
- 一个系统要独立于它的产品的创建、组合和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
结构图
优缺点
- 它分离了具体的类。
- 它使得易于交换产品系列。
- 有利于产品的一致性。
- 难以支持新种类的产品。
伪代码实例
小结
Builder
将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用性
- 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
- 当构建过程必须允许被构建的对象有不同的表示时。
结构图
优缺点
- 它使你可以改变一个产品的内部表示。
- 它将构造代码和表示代码分开。
- 它使你可对构造过程进行更精细的控制。
相关源码实现
- okhttpClient类
- Android系统相关Builder
FactoryMethod(工厂方法)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
适用性
- 当一个类不知道它所必须创建对象的类的时候。
- 当一个类希望由它的子类来指定它所创建的对象的时候。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
结构图
优缺点
- 工厂方法不再将于特定应用有关的类绑定到你的代码中。代码仅处理Product接口。
ProtoType(原型)
用原型指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
适用性
- 当要实例化的类是在运行时刻执行的,例如,通过动态加载;
- 为了避免创建一个与产品类层级平行的工厂类层级时。
- 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
结构图
优缺点
- 运行时刻增加或删除产品
- 改变值以指定新对象
- 改变结构以指定新对象
- 减少子类的创建
- 用类动态配置应用
Singleton(单例)
保证一个类只有一个实例,并提供一个访问它的全局访问点。
适用性
- 当类只能有一个实例而客户可以从一个众所周知的访问点访问它
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
结构图
优缺点
- 对唯一实例的受控访问
- 缩小名空间
- 允许对操作和表示的精化
创建型模式的讨论
创建模式就是对对象实例化的抽象,隐藏创建过程、细节,将实例化工作委托给另一个对象。