#针对接口编程,而不是针对实现编程
#优先考虑使用对象组合,而不是继承
#考虑设计中什么应该是可变的,在不引起重新设计的前提下改变
#只在一个地方实现,只实现一次
创建型:
Factory【工厂模式】:顾名思义,声明一个创建对象的接口,封装了对象的创建过程。
AbstactFactory【抽象工厂模式】:我更喜欢称呼为生产线模式,通过继承后可以在不同的生产线创建不同类别的对象。
Singleton【单例模式】:创建全局的对象,有时需要double check。
Builder【建造模式】:创建对象很复杂的时候,需要将对象的创建和表示分离,一步一步的进行创建。
Prototype【克隆(元型)模式】:通过已经存在的对象,创建新的对象。Clone。
结构型:
Bridge【桥接模式】:将抽象和实现分离,两个部分可以独立进行修改。【将一组实现与使用他们的对象分离】
Decorator【装饰模式】:以组合方式替代继承,要装饰的子类和装饰者有共同的父类,可以发挥多态的威力。
Composite【组合模式】:完美解决递归构建树状组合结构。
Flyweight【享元模式】:创建大量轻量级细粒度对象,减少空间的让费,例如文档编辑器,预先创建a,1,2。。。
Proxy【代理模式】:创建开销大的对象,如大图片,虚代理,virtual proxy;为网络对象创建一个局部代理,远程代理,remote proxy;控制不同用户的不同层次的权限,保护代理,protection proxy;封装创建的过程,create proxy;
Facecade【外观模式】:为复杂的子系统,提供简介的外部接口;
Adapter【适配器模式】:使控制范围之外的一个对象符合某类统一的接口,为一个功能有效的类提供适应外部要求的接口,通常用在适应现有设计模式需要的多态;
注-Facecade模式简化了接口,Adapter模式则将一个类的现有接口转换成另外一个接口。
行为型:
框架是相同的,但是框架下面每一个逻辑是不同的
Template【模版方法模式】:将逻辑(算法)放在抽象类中,并定义好细节的接口,子类中实现细节
Strategy【策略模式】:将逻辑(算法)封装在一个类中,并采用组合的方式使用,保持框架不变
以上两个模式解决的问题是类似的,一个是采用继承的方式,一个是采用组合(委托)的方式。
State【状态模式】:FSM(有限状态自动机),将状态逻辑与动作实现分离,状态-事件-动作【状态机】
Observer【观察者模式】:MVC,一个数据变化,所有观察者都可以知道其变化。
Memento【“后悔药”模式(备忘录)】:在不破坏封装的前提下,捕获并保存类的内部状态,可以更加状态进行恢复操作。
Mediator【中介模式】:在大规模的系统中,将对象间的交互和通信进行封装,作为中介者,对象间的交互通过中介来实现。
Command【命令模式】:将请求封装到一个对象中(command),将请求的接受者存放到请求的实现中,实现消息接收和处理的解耦。
Vistor【访问者模式】:将变更封装到一个类中(访问操作),待更改类提供一个接收接口,减少需求变更的影响。
Chain of Resopnsibility【指责链模式】:基于消息,事件驱动;将处理请求对象成链,请求传递中进行处理,直到有对象处理了该请求;MFC。
Iterator【迭代器模式】:stl vector list。
Interpreter【解释者模式】:解释器框架