设计模式分类
1. 模式分类
- 从目的看:
- 创建型(creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现而引起来的冲击;
- 结构型(structural)模式:通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击;
- 行为型(behavioral)模式:通过类继承或者对象组合来划分类与对象间的职责,从而应对需求变化为多个交互的对象带来的冲击;
- 从范围看:
- 类模式处理类与子类的静态关系;
- 对象模式处理对象间的动态关系;
2. 从封装变化角度对模式分类
- 组件协作
- Template Method
- Observer/Event
- Strategy
- 单一职责
- Decorator
- Bridge
- 对象创建
- Factory Method
- Abstract Factory
- Prototype
- Builder
- 对象性能
- Signleton
- Flyweight
- 接口隔离
- Facade
- Proxy
- Mediator
- Adapter
- 状态变化
- Memento
- State
- 数据结构
- Composite
- Iterator
- Chain of Resposibility
- 行为变化
- Command
- Visitor
- 领域问题
- Interpreter
3. 重构获得设计模式
- 面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”指的是那些可以满足“应对变化、提高复用”的设计;
- 现代软件设计的特征是“需求的频繁变化”。设计模式的要点是“寻求变化点、然后在变化点出应用设计模式、从而来更好的应对需求的变化”,“什么时候、什么地点应用设计模式”比“理解设计模式结构本身”更为重要;
- 设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的“重构获得模式(refactoring to patterns)”是目前普遍公认的最好的使用设计模式的方法;
推荐书籍:
《重构——改善既有代码的设计》,《重构与模式》
4. 重构关键技法
- 静态 —> 动态
- 早绑定—>晚绑定
- 继承—>组合
- 编译时依赖—>运行时依赖
- 紧耦合—>松耦合