一.GOF-23 模式分类
从目的来看:
- 创建型模式:解决对象创建的工作。
- 结构型模式:解决需求变化为对象结构带来的冲击。
- 行为型模式:解决多个类交互之间责任的划分问题。
从范围来看:
- 类模式处理类与子类的静态关系(注重类)
- 对象模式处理对象间的动态关系(注重组合方案)
从封装变化角度对模式分类:
组件协作:
- Template Method
- Strategy
- Observer / Event
单一职责:
- Decorator
- Bridge
对象创建:
- Factory Method
- Abstract Factory
- Prototype
- Builder
对象性能:
- Singleton
- Flyweight
接口隔离:
- Facade
- Proxy
- Mediator
- Adater
状态变化:
- Memento
- State
数据结构:
- Composite
- Iterator
- Chain of Resposibility
行为变化:
- Conmand
- Visitor
领域问题:
- Interpreter
二.重构获得模式 Refactoring to Patterns
面向对象设计模式是"好的面向对象设计" => 可以满足"应对变化,提高复用"的设计模式。
现代软件设计的特点是"需求的频繁变化"。"寻求变化点,然后在变化点处应用设计模式"。
设计模式的应用不宜先入为主,一上来就使用设计模式是最大误用。没有一步到位的设计模式。
重构关键技法
静态 => 动态
早绑定 => 晚绑定
继承 => 组合
编译时依赖 => 运行时依赖
紧耦合 => 送耦合
三."组件协作"模式
"组件协作"模式通过晚期绑定,来实现框架与程序之间的松耦合,是二者之间协作时常用的模式。
典型模型:
- Template Method
- Strategy
- Observer / Event
要点总结
Template Method模式是一种肥肠基础性的设计模式。它用最简洁的机制(虚函数)为很多应用程序框架提供了灵活的扩展点,是代码复用方便的实现结构。
除了可以灵活应对子步骤变化外,"不要不要调用我,让我来调用你"的反向控制结构式Template Mothod的典型应用。
在具体实现方面,被Template Method调用的虚方法可以实现,也可以没有任何实现(抽象方法、纯虚方法),但推荐要把它们设置为protected方法。