这是一系列文章,原本是我撰写的公司内部讲义。最近重新熟悉设计模式翻了出来,再温习一下。
本文的目的:
- 介绍设计模式
- 在开发过程中主动使用设计模式
- 使用设计模式来重构已有代码
- 不是完整的设计模式参考和详解,仅仅是推荐
什么是设计模式
设计模式的系统性概念是 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
分享到:
相关推荐
电力系统分析:开篇简介.ppt
工业软件系列报告之开篇:软件为体,工业铸魂.pdf
前言导读升级版的《程序员练级攻略》会比Coolshell上的内容更多,也更专业。这篇文章有【入门篇】、【修养篇】、【专业基础篇】、【软件设计篇】、【高手成长篇】
$ ls 备忘录模式.pdf 工厂模式.pdf 模板模式.pdf 中介者...迭代器模式.pdf 开篇.pdf 原型模式.pdf 访问者模式.pdf 命令模式.pdf 责任链模式.pdf $ http://blog.csdn.net/feixiaoxing/article/category/951264的mirror
开篇.pdf 继承、封装、多态.pdf 备忘录模式.pdf 工厂模式.pdf 模板模式.pdf 中介者模式.pdf 策略模式.pdf 观察者模式.pdf 桥接模式.pdf 装饰模式.pdf 抽象工厂模式.pdf 适配器模式.pdf 状态模式.pdf 代理...
, 好的模式建立在对人与事物的深刻认知之上。, 本书开篇即总结了“与人有关”的各类问题,为读者提供了界面设计总体思路上的指引,帮助读者举一反三。, 接下来,本书收集并分析了很多常用的界面设计模式,帮助读者...
《界面设计模式(第2版)》开篇即总结了“与人有关”的各类问题,为读者提供了界面设计总体思路上的指引,帮助读者举一反三。 接下来,《界面设计模式(第2版)》收集并分析了很多常用的界面设计模式,帮助读者...
企业架构_-_开篇:TOGAF介绍
企业架构_-_开篇:TOGAF介绍.zip
微信小程序开发入门从0到1实现天气小程序
数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句...
本系列一共有20篇左右,除了介绍23种GOF设计模式中常用的一部分之外(一些设计模式的思想在C#语言中有了更简单的实现,一些设计模式不是很常用)还可能会介绍一些其它有用的设计模式。在这些文章中,我不会过多去说...
这一次重温一下《JavaScript设计模式与开发实践》,开篇为单例模式。 /** * pre 单例模式 * 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 * 应用:单例模式是一种常用的模式,有一些对象我们...
20210310-德邦证券-A股市场规则研究系列开篇:开弓之箭,IPO制度变迁与展望.pdf
PHP开篇-教学设计
NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一...