设计模式:设计模式简介
本次系列的文章摘自《设计模式:可复用面向对象软件工程的基础》(Erich Gamma 等著,李英军 等 译)。
本文只是对设计模式做一个简单的介绍。
设计模式一样而言,有四个基本要素:1、设计模式;2、问题;3、解决方案;4、效果。设计模式是对被用来在特定的场景下解决一般设计问题的类和相互通信的对象的描述。
描述一个设计模式的主要从以下的几面来进行:模式名和分类;意图;别名;动机;适用性;结构;参与者;协作;效果;实现;代码示例;已知应用;相关模式。
设计模式的分类主要有两种,其一是根据目的准测分类,即模式是用来完成什么工作的;其二是范围准则,指定模式主要是用于类还是用于对象。分类结果如下图:
|
目的 |
|||
创建型 |
结构型 |
行为型 |
||
范围 |
类 |
Factory Method |
Adapter(类) |
Interpret Template Method |
对象 |
Abstract Factory Builder Prototype Singleton |
Adapter(对象) Bridge Composite Decorator Façade Flyweight Proxy |
Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor |
那么,如何选择设计模式呢?
主要从以下的几个方面来着手:
1.考虑设计模式是怎么样解决设计问题的。注意各个模式对于找到合适的对象、决定对象的粒度、指定对象的接口的影响。
2.浏览模式的意图部分 。通读每个模式的意图,找到和问题相关的一个或多个模式。
3.研究模式怎么样相互关联。设计模式之间的关系如下图所示:
4.检查重新设计的原因。
5.考虑哪些设计是可以改变的。主要是考虑那些是可以变化却不引起重新设计。设计模式所支持的设计的可变方面如下所示。
目的 |
设计模式 |
可变的方面 |
创建 |
Abstract Factory Builder Factory Method Prototype Singleton |
产品对象家族 如何创建一个组合对象 被实例化的子类 被实例化的类 一个类的唯一实例 |
结构 |
Adapter Bridge Composite Decorator Facade Flyweight Proxy |
对象的接口 对象的实现 一个类的结构和组成 对象的职责,不产生子类 一个子系统的接口 对象的存储开销 如何访问一个对象;该对象的位置
|
行为 |
Chain of Responsibility Command Interpreter Iterator Mediator Memento
Observer
State Strategy Template Method Visitor |
满足一个请求的对象 何时、怎么样满足一个请求 一个语言的文法以及解释 如何遍历、访问一个聚合的各元素 对象间怎么样交互、和谁交互 一个对象中哪些私有信息存放在该对象之外,以及在什么时候进行存储 多个对象依赖于另外一个对象,而这个对象如何保持一致 对象的状态 算法 算法中的某些步骤 某些可做用于一个对象上的操作,但不修改这个对象的类 |