生成实例
Singleton模式
确保任何情况下只有一个实例
私有化构造函数
静态单例对象
提供静态方法获取静态单例对象
double-check lock避免多线程问题
Builder模式
用于组装具有复杂结构的实例
Builder定义构建程序
Director定义构建流程
具体构建程序可替换
Abstract Factory模式
将关联零件组装成产品
不关心零件的具体实现,只关心使用接口组装成产品
优点:增加零件的不同实现非常简单,只需要实现不同的具体零件类,并增加具体工厂
缺点:增加零件的数量非常困难,需要修改所有的具体工厂
一致性
Composite模式
容器与内容的一致性
能够使容器与内容具有一致性,创造出递归结构
Decorator模式
装饰物和被装饰物的一致性,拥有相同的API
被装饰物即使被装饰起来,API也不会被隐藏
主要功能是通过添加装饰类来增加对象的功能
实现了不修改被装饰的类即可增加新功能
添加一种新装饰物便可以添加不同的排列组合,增加不同的新功能,可以应对多功能对象的需求
缺点:导致程序中增加许多功能类似的小类
简单化
Facade模式
为互相关联的类整理出高层接口,让系统对外只有一个简单的接口
减少接口,弱化程序与外部的关联关系
可以递归使用,让系统更加简单
Mediator模式
发生任何事情通知仲裁者,并有仲裁者作出控制
不让各个对象之间互相沟通,而是让他们单独和仲裁者沟通
将控制逻辑交由仲裁者
ConcreteColleague可以复用,ConcreteMediator很难复用
交给子类
Template Method模式
将具体的处理交给子类
父类定义处理流程的框架
子类实现具体处理
Factory Method模式
将实例的生成交给子类
使用Template Method模式将生成流程固定
ConcreteFactory生成ConcreteProduct
ConcreteProduct构造函数最好不要是public,强制只能使用Factory生成
ConcreteFactor应该是ConcreteProduct的友元类,因为需要调用受保护的构造函数
访问数据结构
Visitor模式
将处理从数据结构中分离
易于增加访问者(处理方式)
难于增加被访问者(数据结构)
被访问的Element必须向Visitor提供足够的信息
符合单一职责原则
Chain of Reponsibility模式
将多个对象组成职责链,并按顺序决定谁来负责
可弱化请求方和职责方的关联关系,使他们都可以成为独立的组件
简化处理方逻辑,具体处理的判断交由职责链完成
管理状态
Observer模式
当观察对象的状态发生变化时,会通知观察者,适用于根据对象状态进行相应处理的场景
利用抽象类和接口从具体类中抽出抽象方法
在将实例作为参数传递至类中,或者在类的字段中保存实例时,不使用具体类型,而是使用抽象类型和接口
Observer的顺序不应该影响到通知,并且需要避免循环通知的问题
Memento模式
用于实现撤销,重做,历史记录,快照等功能
Memento的宽接口用于获取保护信息
Memento的窄接口用于获取公共信息
Caretaker只能调用Memento的窄接口,即将其当做黑盒
Originator可以调用Memento的宽接口,用于修改内部数据
在实现上,Originator必须为Memento的友元类,以调用protect属性的宽接口
State模式
以类表示状态,通过切换类来方便地切换状态,增加新的类就可以增加新的状态
不使用State模式时,需要使用条件语句判断当前状态,状态越多,分支越多
状态的迁移可以由各个ConstractState来管理,也可以由Context来管理,取决于使用者想要的依赖关系
易于增加新的状态,难于增加依赖状态的处理