设计模式
【设计模式】是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
- 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性
- 设计模式使代码编制真正工程化
- 设计模式是软件工程的基石脉络,如同大厦的结构一样
「每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。」——Christopher Alexander
「GOF设计模式」Gang of Four,四人帮。设计模式的经典书籍《设计模式——可复用面向对象软件的基础》是由四个人共同完成,故GOF设计模式特指该书中描述了23种经典的面向对象的设计模式。
设计模式的重点
面向对象设计模式是“好的面向对象设计”。
所谓“好的面向对象设计”指是那些可以满足“应对变化,提高复用”的设计。
现代软件设计的特征:是“需求的频繁变化”
设计模式的要点:是“寻找变化点,然后在变化点处应用设计模式,从而来更好地应对需求的变化”。
设计模式的重点:“什么时候、什么地点应用设计模式”比“理解设计模式结构本身”更为重要
- 重点不是在理解、看懂设计模式;
- 重点是在于把握住设计原则,然后在某个场景下,某个地方正确选择设计模式,这一点更为重要!
设计模式的要素
- 模式名称:好记,听名字就知道干嘛的
- 问题:这个设计模式具体是解决什么问题的
- 解决方案:这个模式的实现方案
- 效果:这个模式的优点
怎样使用设计模式
- 大致浏览一遍模式:特别注意适用性和效果部分,以这个为标准判断是否适合用于你所遇到的问题
- 回头研究结构部分、参与者部分和协作部分:这样也能确保理解这个模式的类、对象,以及它们是怎么被关联的
- 看代码示例部分,看看这个模式代码形式的具体例子
- 选择模式参与者的名字,使它们在应用上下文中有意义:参与者的名字过于抽象,要将参与者名字和实际应用结合起来,有助于理解
- 定义类:声明接口,建立它们的继承关系,以及定义代表数据和对象引用的实例变量
- 定义模式中专用于应用的操作名称
- 实现执行模式中责任和协作的操作
重构
重构产生模式(Refactoring to Patterns)
设计模式的应用不宜先入为主,一上来就是使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。
敏捷软件开发实践提倡的“Refactoring to Parrerns”是目前普遍公认的最好的使用设计模式的方法。
说明:好的设计模式是在代码迭代中产生的,是通过重构的方式修正原先的代码。
重构关键技法
一共五点
- 静态->动态
- 早绑定->晚绑定
- 继承->组合
- 编译时依赖->运行时依赖
- 紧耦合->松耦合
其实这五点讲的是同一个事情,它们其实是从不同角度来看待同一个问题。