设计模式

【设计模式】是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

  1. 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性
  2. 设计模式使代码编制真正工程化
  3. 设计模式是软件工程的基石脉络,如同大厦的结构一样

「每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。」——Christopher Alexander

「GOF设计模式」Gang of Four,四人帮。设计模式的经典书籍《设计模式——可复用面向对象软件的基础》是由四个人共同完成,故GOF设计模式特指该书中描述了23种经典的面向对象的设计模式。

设计模式的重点

面向对象设计模式是“好的面向对象设计”。

所谓“好的面向对象设计”指是那些可以满足“应对变化,提高复用”的设计。

现代软件设计的特征:是“需求的频繁变化”
设计模式的要点:是“寻找变化点,然后在变化点处应用设计模式,从而来更好地应对需求的变化”。

设计模式的重点:“什么时候、什么地点应用设计模式”比“理解设计模式结构本身”更为重要

  1. 重点不是在理解、看懂设计模式;
  2. 重点是在于把握住设计原则,然后在某个场景下,某个地方正确选择设计模式,这一点更为重要!

设计模式的要素

  1. 模式名称:好记,听名字就知道干嘛的
  2. 问题:这个设计模式具体是解决什么问题的
  3. 解决方案:这个模式的实现方案
  4. 效果:这个模式的优点

怎样使用设计模式

  1. 大致浏览一遍模式:特别注意适用性和效果部分,以这个为标准判断是否适合用于你所遇到的问题
  2. 回头研究结构部分、参与者部分和协作部分:这样也能确保理解这个模式的类、对象,以及它们是怎么被关联的
  3. 看代码示例部分,看看这个模式代码形式的具体例子
  4. 选择模式参与者的名字,使它们在应用上下文中有意义:参与者的名字过于抽象,要将参与者名字和实际应用结合起来,有助于理解
  5. 定义类:声明接口,建立它们的继承关系,以及定义代表数据和对象引用的实例变量
  6. 定义模式中专用于应用的操作名称
  7. 实现执行模式中责任和协作的操作

重构

重构产生模式(Refactoring to Patterns)

设计模式的应用不宜先入为主,一上来就是使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。

敏捷软件开发实践提倡的“Refactoring to Parrerns”是目前普遍公认的最好的使用设计模式的方法。
说明:好的设计模式是在代码迭代中产生的,是通过重构的方式修正原先的代码。

重构关键技法

一共五点

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

其实这五点讲的是同一个事情,它们其实是从不同角度来看待同一个问题。