这是一系列文章,原本是我撰写的公司内部讲义。最近重新熟悉设计模式翻了出来,再温习一下。
本文的目的:
- 介绍设计模式
- 在开发过程中主动使用设计模式
- 使用设计模式来重构已有代码
- 不是完整的设计模式参考和详解,仅仅是推荐
什么是设计模式
设计模式的系统性概念是 GoF 整理并提出来的。 GoF (又称“四人帮”,即 Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides )的《设计模式》一书中有详细的介绍。《C++ 编程思想》第二卷也有介绍和典型模式的 C++ 实现。
我们引用一下设计模式的通俗解释:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
其实这个解释还是不够明晰,最好是阅读 GoF 的《设计模式》一书,关于设计模式是这么定义的:每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。
模式的四个基本要素
- 模式名称(pattern name),用一两个词描述模式的问题、解决方案和效果
- 问题(problem),描述应该在何时使用模式
- 解决方案(solution),描述设计的组成成分,它们之间的关系及各自的职责和协作方式。
- 效果(consequences),描述模式应用的效果及使用模式应权衡的问题。
设计模式和框架
这是经常容易混淆或者交叠的两个概念,下面几点可以作为参考,对比两个概念。
- 框架( Framework )是构成一类特定软件可复用设计的一组相互协作的类。比如 Qt , EJB( Enterprise Java Beans )等。
- 设计模式的目的是增加代码复用和可维护性
- 框架强调设计复用,必然要引入设计模式
- 了解设计模式有助于理解和使用框架
- 设计模式比框架更抽象
- 设计模式是比框架更小的体系结构元素
- 框架比设计模式更加特例化
一般将设计模式分为创建型、结构型、行为型三类。下图是 GoF 《设计模式》中的一张表:
如何选择设计模式
下面是摘自 GoF 《设计模式》 1.7 节的内容:
- 考虑设计模式是怎样解决设计问题的
- 浏览模式的意图部分
- 研究模式怎样互相关联
- 研究目的相似的模式
- 检查重新设计的原因
- 考虑你的设计中哪些是可变的
如何使用设计模式
下面是摘自 GoF 《设计模式》 1.8 节的内容:
- 大致浏览一遍模式
- 回头研究结构部分、参与者部分和协作部分
- 看代码示例部分,看看这个模式代码形成的具体例子
- 选择模式参与者的名字,使他们在应用上下文中有意义
- 定义类
- 定义模式中专用于应用的操作名称
- 实现执行模式中责任和协作的操作
本系列文件介绍的模式
本文不是《设计模式》的完整讲解,仅仅是作为一个推介,希望大家可以在软件开发中主动使用设计模式。
先介绍下面几种简单、常用的(主要基于我的编程经验),后续再介绍其他的模式:
- Singleton
- Factory
- Command
- Observer
- Chain of Responsibility
这是一系列文章,原本是我撰写的公司内部讲义。最近重新熟悉设计模式翻了出来,再温习一下。
本文的目的:
- 介绍设计模式
- 在开发过程中主动使用设计模式
- 使用设计模式来重构已有代码
- 不是完整的设计模式参考和详解,仅仅是推荐
什么是设计模式
设计模式的系统性概念是 GoF 整理并提出来的。 GoF (又称“四人帮”,即 Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides )的《设计模式》一书中有详细的介绍。《C++ 编程思想》第二卷也有介绍和典型模式的 C++ 实现。
我们引用一下设计模式的通俗解释:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
其实这个解释还是不够明晰,最好是阅读 GoF 的《设计模式》一书,关于设计模式是这么定义的:每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。
模式的四个基本要素
- 模式名称(pattern name),用一两个词描述模式的问题、解决方案和效果
- 问题(problem),描述应该在何时使用模式
- 解决方案(solution),描述设计的组成成分,它们之间的关系及各自的职责和协作方式。
- 效果(consequences),描述模式应用的效果及使用模式应权衡的问题。
设计模式和框架
这是经常容易混淆或者交叠的两个概念,下面几点可以作为参考,对比两个概念。
- 框架( Framework )是构成一类特定软件可复用设计的一组相互协作的类。比如 Qt , EJB( Enterprise Java Beans )等。
- 设计模式的目的是增加代码复用和可维护性
- 框架强调设计复用,必然要引入设计模式
- 了解设计模式有助于理解和使用框架
- 设计模式比框架更抽象
- 设计模式是比框架更小的体系结构元素
- 框架比设计模式更加特例化
一般将设计模式分为创建型、结构型、行为型三类。下图是 GoF 《设计模式》中的一张表:
如何选择设计模式
下面是摘自 GoF 《设计模式》 1.7 节的内容:
- 考虑设计模式是怎样解决设计问题的
- 浏览模式的意图部分
- 研究模式怎样互相关联
- 研究目的相似的模式
- 检查重新设计的原因
- 考虑你的设计中哪些是可变的
如何使用设计模式
下面是摘自 GoF 《设计模式》 1.8 节的内容:
- 大致浏览一遍模式
- 回头研究结构部分、参与者部分和协作部分
- 看代码示例部分,看看这个模式代码形成的具体例子
- 选择模式参与者的名字,使他们在应用上下文中有意义
- 定义类
- 定义模式中专用于应用的操作名称
- 实现执行模式中责任和协作的操作
本系列文件介绍的模式
本文不是《设计模式》的完整讲解,仅仅是作为一个推介,希望大家可以在软件开发中主动使用设计模式。
先介绍下面几种简单、常用的(主要基于我的编程经验),后续再介绍其他的模式:
- Singleton
- Factory
- Command
- Observer
- Chain of Responsibility