模式:支持软件结构和设计的重用,与开发语言无关,但建立在一定的环境基础上
框架:支持细节设计和代码的重用,是一组组件的综合,这些组件相互协作,为一类相关应用提供可重用的框架结构
比较:设计模式比框架更抽象、和框架相比,设计模式是更小的单元的框架元素、从使用的广度来说,设计模式比框架更广,它与应用的相关性更小
目标:
重用:继承、组合
接口和实现的分离:接口保持不变,分离带来灵活性、多态性
松耦合性:降低复杂性
描述要素:
模式名称
问题、动机
约束
上下文
解决方案:结构、参与者、协作、实现
评测
相关模式
分类:
创建型模式
Factory Method:用一个virtual method完场创建过程
Abstract Factory:一个product族的factory method构成了一个factory接口
Prototype:通过product原型来构造product,Clone+prototype manager
Builder:通过一个构造算法和builder接口把构造与客户隔离开
Singleton:单实例类型,如何构造、访问这个单实例
Finder:把对象的获取过程与客户隔离开
结构型模式
adapter:用于两个不兼容接口之间的转接
bridge:用于将一个抽象与多个可能的实现连接起来
facade:用于为复杂的子系统定义一个新的简单易用的接口
composite:用于构造对象组合结构
decorator:用于为对象增加新的职责
proxy:为目标对象提供一个替代者
flyweight:针对细粒度对象的一种全局控制手段
行为型模式
command:用于对象封装命令,使得命令可以被传递、记录、排队
iterator:把对聚合体对象的访问封装起来
Observer:建立起一对多的通信模型,特别适合于更新通知和事件模型
Strategy:把一个对象或者类的某些行为封装到另一个单独的对象中
Visitor:把对一个结构模型的操作单独组织到一个类中
Chain of Responsibility:请求的处理过程,沿着传递,decouple发送方和接受方
Interpreter:在类层次结构中,在特定环境的“interpret”过程
Mediator:用一个mediator来decouple各同等单元
State:把一个对象的状态独立出来,动态可变换状态对象的类型
Template Method:在某类中定义算法的骨架,把某些细节延迟到子类中
命令模式:将调用操作的对象与知道如何实现该操作的对象解耦
Client:创建一个ConcreteCommand对象,调用者,并确定其接受者
Command:声明一个给所有具体命令
ConcereCommand:定义一个接收者和行为之间的弱耦合,实现execute()方法,该方法调用接收者相应的操作
Invoker:伏在调用命令对象执行请求
Receiver:具体实施一个请求
适配器模式:
对象适配器:强调软件复用
类适配器:通过继承机制实现