模式名称 |
英文名 |
所能适应的变化 |
实现要点 |
抽象工厂 |
Abstract factory |
动态地选择创建多组产品对象中的某一组。添加新的产品对象组非常容易 |
定义一个抽象工厂的接口,有该接口的派生类具体决定创建那一组产品 |
生成器模式 |
Builder |
动态地组合创建一个复杂对象的多个步骤,每一个步骤野可以很容易的发生变化 |
定义一个抽象生成器的接口类,由该接口的派生类具体决定创建过程的每一个步骤如何实现 |
工厂方法模式 |
Factory method |
对new操作的进一步封装,用户不用提供类名就能创建对象,能动态改变创建出的对象类型 |
定义工厂方法(虚函数),推迟到派生类再实现该工厂方法 |
原型模式 |
Prototype |
通过拷贝原型对象来创建新的对象,改变原型对象就能动态低改变产品对象的类型 |
定义克隆方法(虚方法),在所有的产品对象中实现这个克隆方法 |
单件模式 |
Singleton |
实现只有唯一对象实例的类(和适应变化无关)。单件模式在构建整个系统时非常重要 |
用静态数据成员和函数实现 |
适配器模式 |
Adapter |
把一个接口转换成另外一个接口,各力量个子系统,使他们的变化不会互相影响 |
定义一个接口,可以通过继承或聚合来被适配类来实现 |
桥接模式 |
Bridge |
分离类的接口和实现,在接口不变的情况下,可以动态地改变类的实现 |
分别定义抽象的接口和实现的接口,抽象的接口类中聚合一个实现接口的引用,该引用就是连接接口和实现桥梁 |
复合模式 |
Composite |
定义整体和部分对象的继承和聚合结构。很容易添加新的整体或部分的对象 |
整体和部分类继承于同一个接口,整体接口聚合部分接口 |
装饰模式 |
decorator |
通过聚合而不是继承的方式扩充一个类的功能。可以动态选择功能 |
实现结构类似于复合模式,但目的是扩充类的功能 |
外观模式 |
Façade |
为子系统提供一个统一的接口,子系统的变化不会影响系统的其他部分 |
接口类负责把请求转发给子系统中的其他对象 |
享元模式 |
Flyweight |
共享小对象,解决面向对象设计中对象过多的问题 |
享元工厂通过享元接口管理(聚合)所有的享元对象,客户类必须通过享元工厂访问享元对象 |
代理模式 |
Proxy |
通过代理访问另外一个对象,被代理对象的位置、实现以及变化不会对客户类产生影响 |
代理类和被代理类继承与同一个接口,代理类通过引用聚合被代理。 |
职责链模式 |
Chain of Responsibility |
把请求发送给一个职责链,职责链上的多个对象都有机会处理请求,对象自己决定如何处理该请求。很容易添加、删除或改变职责链上的处理环节 |
定义请求处理接口类,派生类可以自己决定如何处理请求,具体的请求处理对象被组织成了一条职责链 |
命令模式 |
Command |
把请求封装成命令对象,发送者、命令和接收者对象三者之间松散耦合,都可以很容易地发生变化,很容易实现宏命令、命令的撤消等操作 |
定义命令接口类,具体的命令类可以决定如何处理请求,即可以自己处理,也可以把该请求发送给另一个接收者处理 |
解释器模式 |
Interpreter |
处理类似语言语法的结构,很容易添加新的语法,以及改变原有的语法的组织形式 |
定义语法表达式接口类,具体的语法表达式的组织结构类似复合模式 |
迭代器模式 |
Iterator |
遍历聚合对象中的元素,不用关心这些元素的实现。容器、迭代器和算法之间相互独立。很容易定义新的迭代器和算法 |
定义容器和迭代器接口类,具体的迭代器实现访问容器的方法 |
中介者模式 |
Mediator |
用中介者隔离发送者和接收者,发送者和接收者之间没有耦合,可以独立地发生变化 |
定义中介者和协作者接口类,中介者管理所有的协作者之间的关联关系 |
备忘录模式 |
Memento |
客户类可以存储服务器类的状态,而不用知道服务器类的内部结构,服务器类的变化不影响客户类 |
定义一个备忘录类来保存服务器类的状态,备忘录类隔离了客户类和服务器类 |
观察者模式 |
Observer |
一对多的事件传输结构,发送者不直接依赖于接收者,接收者的变化不会影响发送者 |
定义观察者和主体接口类,具体的观察者通过注册机制,在具体的主体类种进行注册 |
状态模式 |
State |
对象状态发生变化时,动态地改变行为。很容易添加新的状态 |
定义状态接口类,具体的状态类中实现该状态对应的行为,上下文对象中聚合一个当前使用的状态 |
策略模式 |
Strategy |
封装一系列算法,可以动态选择使用哪一个算法,很容易添加新的算法 |
定义策略接口类,具体的策略类中实现具体的算法,上下文对象中聚合一个当前使用的策略 |
模板方法模式 |
Templete Method |
不改变算法的结构就能重新定义算法中的某些步骤 |
抽象类中实现算法的骨架,派生类中实现算法的具体步骤 |
访问者模式 |
Visitor |
分离一个类结构和定义在这个类结构之上的操作,可以在不改变类结构的前提下添加新的操作 |
定义访问者接口,具体的访问者类实现具体的操作 |