1、创建型模式:
Singleton:解决的是实例化对象的个数的问题,比如抽象工厂中的工厂、对象池等,除了Singleton之外,其他创建型模式解决的都是 new 所带来的耦合关系。
Abstract Factory:创建一系列相互依赖对象,并能在运行时改变系列。
Factory Method:创建单个对象,在Abstract Factory有使用到。
Prototype:通过拷贝原型来创建新的对象。
Factory Method,Abstract Factory, Builder都需要一个额外的工厂类来负责实例化“一边对象”,而Prototype则是通过原型(一个特殊的工厂类)来克隆“易变对象”。
如果遇到“易变类”,起初的设计通常从Factory Method开始,当遇到更多的复杂变化时,再考虑重构为其他三种工厂模式(Factory Method,Abstract Factory, Builder)。
2、结构性模式
Adapter:注重转换接口,将不吻合的接口适配对象,用于旧代码复用、类库迁移等。
Bridge:注重实现抽象和实现的分离,支持对象多维度的变化。
Composite:注重统一接口,将“一对多”的关系转化为“一对一”的关系,屏蔽对象容器内部实现结构,实现对象和对象容器使用的一致性。
Decorator:注重稳定接口,在此前提下为对象扩展功能,实现对象功能的扩展,避免子类膨胀。
Facade:注重简化接口,屏蔽各子系统的复杂性,提供更高层接口供客户访问。
Flyweight:注重保留接口,在内部使用共享技术对对象存储进行优化(通过共享大量细粒度对象,提供系统性能)。
Proxy:注重假借接口,通过增加间接代理,实现更多控制,屏蔽复杂性。
3 、行为型模式
Template Method:封装算法结构,定义算法骨架,支持算法子步骤变化。
Strategy:注重封装算法,支持算法的变化,通过封装一系列算法,从而可以随时独立于客户替换算法。
State:注重封装与状态相关的行为,支持状态的变化,通过封装对象状态,从而在其内部状态改变时改变它的行为。
Memento:注重封装对象状态变化,支持状态保存、恢复。
Mediator:注重封装对象间的交互,通过封装一系列对象之间的复杂交互,使他们不需要显式相互引用,实现解耦。
Chain of Responsibility:注重封装对象责任,支持责任的变化,通过动态构建职责链,实现事务处理。
Command:注重将请求封装为对象,支持请求的变化,通过将一组行为抽象为对象,实现行为请求者和行为实现者之间的解耦。
Iterator:注重封装特定领域变化,支持集合的变化,屏蔽集合对象内部复杂结构,提供客户程序对它的透明遍历。
Interpreter:注重封装特定领域变化,支持领域问题的频繁变化,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
Observer:注重封装对象通知,支持通信对象的变化,实现对象状态改变,通知依赖它的对象并更新。
Visitor:注重封装对象操作变化,支持在运行时为类结构添加新的操作,在类层次结构中,在不改变各类的前提下定义作用于这些类实例的新的操作。
正确对待模式:
设计模式建立在对系统变化点的基础上进行,哪里有变化,哪里就应用设计模式。
设计模式应该以演化的方式来获得,系统的变化点往往是经过不断演化才能准确定位。
不能为了模式而模式,设计模式是一种软件设计的软力量,而非规范标准,不应夸大设计模式的作用。
《完》