设计模式学习笔记(一):设计模式
1 前言
软件开发技术包含“招式”与“内功”,其中,编程语言,开发技术,著名框架可以认为是“招式”,而数据结构,算法,设计模式,重构,软件工程等则为“内功”。“招式”可以很快学会,但是“内功”的修炼需要更长的时间。对设计模式的学习会令“内功”大增,配合日益纯熟的“招式”,软件开发“功力”想必会达到一个新境界。下面来正式踏入修炼设计模式之旅。
2 设计模式
2.1 来源
模式是在特定环境下人们解决某类重复出现的问题的一套成功或有效的解决方案。
GoF(Gang of Four,简称GoF,分别是Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides)将模式的概念引入软件工程领域,标志着软件模式的诞生。软件模式是将模式的一般概念应用与软件开发领域,即软件开发的总体指导思想或参照样板。软件模式并非仅限于设计模式,还包括架构模式,分析模式和过程模式等。
在软件模式中,设计模式是研究最为深入的分支。设计模式用于在特定条件下为一些重复出现的问题提供合理的,有效的解决方案。
2.2 定义
设计模式:是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结,使用设计模式是为了可重用代码,
让代码更容易被他人理解并且提高代码的可靠性。
设计模式一般包含的要素:
- 模式名称
- 问题
- 目的
- 解决方案
- 效果
其中关键要素为模式名称,问题,解决方案以及效果:
- 模式名称:模式的命名
- 问题:描述了应该在何时使用模式,包括了设计中存在的问题以及问题存在的原因
- 解决方案:描述了一个设计模式的组成部分,以及这些组成部分之间的相互关系,各自的职责和协作方式,通常解决方案通过UML类图和核心代码进行描述
- 效果:描述了模式的优缺点以及使用模式时应权衡的问题
GoF设计模式有23个,模式分类可以按照用途或者处理方式进行分类,按照用途分类的话,可以分为:
- 创建型模式:主要用于描述如何创建对象
- 结构型模式:主要用于描述如何实现类或对象的组合
- 行为型模式:主要用于描述类或对象怎么交互以及怎样分配职责
根据处理方式分类,可以分为:
- 类模式
- 对象模式
两种分类模式通常结合使用,比如单例模式是对象创建型模式。
3 常用设计模式
3.1 创建型模式
- 单例模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 原型模式
- 建造者模式
3.2 结构型模式
- 适配器模式
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式
3.3 行为型模式
- 职责链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式
4 设计模式用途
- 能够实现可维护性复用的设计方案,提高设计与开发效率
- 设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间的沟通以及交流,使得设计方案更加通俗易懂。因为设计模式跨语言,跨平台,跨应用,跨国界
- 大部分设计模式都兼顾了系统的可重用性以及可扩展性,使得可以更好地重用一些已有的设计方案、功能模块以及一个完整的软件系统
- 合理使用设计模式并对设计模式的使用情况进行文档化,将有助于别人更快地理解系统