Head Frist 设计模式 by Freeman E.

Head First Design Patterns

Head Frist学习原则

  1. 慢一点,你理解的越多,需要记的就越少。
  2. 勤做练习,自己记笔记。
  3. There are no dumb Questions。
  4. 上床睡觉之前不要再看别的书了,或者至少不再看其他有难度的东西。
  5. 要喝水,而且要多喝水。
  6. 大声说出来。
  7. 听听你大脑怎么说。
  8. 要有点感觉!
  9. 设计一些东西!

为什么需要设计模式

  1. 知道OO基础,并不足以让你设计出良好的OO系统。
  2. 良好的OO设计必须具备可复用、可扩展、可维护三个特性。
  3. 模式可以让我们建造出具有良好OO设计质量的系统。
  4. 模式被认为是经过验证的OO设计经验。
  5. 模式不是代码,而是针对设计问题的通用解决方案。你可以把它们应用到特定的应用中。
  6. 模式不是被发明,而是被发现。
  7. 大多数的模式和原则着眼于软件变化的主题。
  8. 大多数的模式都允许系统局部变化独立于其他部分。
  9. 我们常把系统中变化的部分抽出来封装。
  10. 模式让开发人员之间有共享的语言,能够最大化沟通的价值。

OO基础

  1. 抽象(Abstract)
  2. 封装(Encapsulate)
  3. 多态(Polymorphic)
  4. 继承(Inheritance)

OO设计原则

封装变化(Encapsulate what varies)

合成复用原则(Composite Reuse Principle)

多用组合,少用继承(Composition Favor over inheritance)

依赖倒置原则(Dependence Inversion Principle)

针对接口编程,不针对实现编程(Program to interface, not an implementation)

为交互对象之间的松耦合设计而努力

开闭原则

类应该对扩展开放,对修改关闭。

遵循开放-关闭原则通常会引入新的抽象层次,增加代码的复杂度。我们要把注意力几种在设计中最有可能改变的地方来应用开闭原则。

设计模式

策略模式(Strategy Pattern)

定义

策略模式(Strategy Pattern)定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

实现

strategy pattern in ruby

UML

观察者模式(Observer Pattern)

定义

观察者模式(Observer Pattern)在对象之间定义一对多依赖,当一个对象的状态改变时,它的所有依赖者都会收到通知并自动更新。

  • 观察者可观察者(主题)之间用松耦合方式结合(loose coupling),可观察者不知道观察者的细节,只知道观察者实现了观察者接口。

  • 使用观察者模式,可以从观察者处推(push)或者拉(pull)数据。

  • 有多个观察者时,不可以依赖特定的通知次序。

实现

observer pattern in ruby

UML

常见场景

GUI框架里的按键等组件,注册不同的观察者到组件的不同类型事件上(如按键按下)。

装饰器模式(Decorator Pattern)

工厂模式(Factory Pattern)

单件模式(Singleton Pattern)

定义

单件模式(Singleton Pattern)确保一个类只有一个实例,并提供一个全局访问点。

  • 在JAVA中实现单件模式需要私有的构造器、一个静态方法和一个静态变量。
  • 确定在性能和资源上的限制,然后小心地选择适当的方案来实现单件,以解决多线程问题(我们必须认定所有的程序都是多线程的)。

实现

singleton pattern in ruby

UML

常见场景

共享资源管理,如线程池(thread pool)、缓存池(cache)、注册表设置(registry setting)。

Reference:

  1. strategy pattern in ruby
  2. 单例模式的八种写法比较