Boolan微专业-设计模式(总结)

2018-04-05  本文已影响0人  GoMomi

设计模式总结

1. 一个目标

管理变化,提高复用!

2. 两种手段

分解 vs. 抽象

3. 八大原则

  1. 依赖倒置原则
  2. 开放封闭原则
  3. 单一职责原则
  4. Liskov 替换原则
  5. 接口隔离原则
  6. 对象组合优于类继承
  7. 封装变化点
  8. 面向接口编程

4. 五大技法

  1. 静态 -> 动态
  2. 早绑定 -> 晚绑定
  3. 继承 -> 组合
  4. 编译时依赖 -> 运行时依赖
  5. 紧耦合 -> 松耦合

5. 简单总结(重点模式加粗、次重点斜体)

  1. Template Method:将固定结构中变化的部分定义为虚函数,由子类去实现,即晚绑定。
  2. Strategy:将算法封装起来,使之可以相互替换。变"if...else..."为"虚函数"
  3. Observer/Event:一种“通知依赖关系”,订阅者自己订阅,通知者在需要通知的时候遍订阅者,完成消息的发送。
  4. Decorator:"is a" + "has a"完成对类功能的扩展,避免因继承而导致的类膨胀。is a是为了维持对外界的接口一致,has a是为了在扩展操作完毕后,调用对象真正的处理流程。其实是在其基础操作外加了一层装饰。
  5. Bridge:将“实现”和“业务”剥离开来,在“业务”类中包含一个执行“实现”类的指针。实现两者的解耦。如Login的逻辑操作,与平台的具体实现剥离开来,在运行时再装配。
  6. Factory Method:绕开new,将对象创建的工作专门的交给一个工厂来完成,延迟实例化到子类。实现对new的封装,隐藏类名,避免构造参数。
  7. Abstract Factory:提供一个接口负责创建一些列相关对象。如各种数据库的连接、命令和读取器对象。
  8. Prototype:使用Clone创建对象,用于结构复杂对象(需保留中间状态)的创建工作。如 Copy On Wirte
  9. Builder:模板方法在对象创建中的应用---算法结构稳定,部分元素变化。
  10. Facade:解耦系统内与系统外对象间的复杂关系。架构层次的模式。
  11. Proxy:提供一个代理封装直接使用对象的复杂性。
  12. Adapter:旧接口 --> 新接口。如STL中的queue、stack、deque
  13. Mediator:解耦系统内各对象间的关系。架构层次的模式。
  14. Singleton:过构造器,提供一种机制来保证一个类只有一个实例,提高性能和效率。
  15. Flyweight:避免大量细粒度对象的性能消耗。各种单例对象的集合,中心思想是有就给,没有才创建。
  16. State:解耦对象操作和状态转换间的紧耦合,与Stategy策略模式异曲同工,将状态对象化。在每次执行完操作后,需改变State,保证后续逻辑的正确运行。
  17. Memento:过时的模式,旨在保证封装性的同时,实现对对象状态的良好保存和恢复。如今的语言可利用序列化等方式实现上述需求,且效率更高。
  18. Composite:解耦客户代码与复杂的对象容器结构。本质是一个树形结构,核心在于复合节点依次遍历子节点,叶子节点则执行具体操作,对外保持接口一致。
  19. Iterator:实现对容器的透明遍历。更推荐用模板实现而非面向对象。(模板是编译时多态、虚函数是运行时多态,前者效率更高)
  20. Chain of Resposibility:解耦请求者和接受者。利用单向列表,让请求在接受链上传递直到被处理。
  21. Command:过时的模式,解耦“行为请求者”和“行为实现者”,将“行为”对象化,使之可以被传递、存储和组合。被C++中的函数对象所替代。
  22. Vistor:当子类数量确定时,解决类层次结构中行为增加的问题。核心是Double Dispatch,条件较为苛刻,使用较少。
  23. Interpreter:将问题表达为某种语法规则下的句子,然后构建一个解析器去解释这样的句子。如字符串的四则远算,人民币的大小写转换等。其难点是应用场合的定义。

6. Tips

7. 成长之路

上一篇 下一篇

猜你喜欢

热点阅读