设计模式是在大量的实践过程中抽象出来的设计原则,它对如何更有效的实现目标具有举足轻重的地位。最早对设计模式这一主题进行研究的是建筑大师Christopher Alexander,在他的著作(A Pattern Language: Towns, Buildings Construction)中提供了成功构建建筑与城市的多种模式。设计模式在软件开发领域发展了几十年后的今天已经相当成熟,诸多记录软件开发模式的著作也如雨后春笋。笔者在项目中经常能发现各种模式的身影,并被其优雅及强大的魅力所深深吸引,所以就打算写点博客来跟大家一起分享我对设计模式一点小小的理解。
设计模式按照意图可以被划分成以下5大类模式:
- 接口型模式
- 职责型模式
- 构造型模式
- 操作型模式
- 扩展型模式
接口型模式
模式 | 意图 |
适配器模式 | 适配类的接口以匹配客户端的要求 |
外观模式 | 为一组类提供一个简单的接口 |
合成模式 | 为单个对象与复合对象提供统一的接口 |
桥接模式 | 解除抽象与实现的耦合,使两者能够独立演化 |
职责型模式
模式 | 意图 |
单例模式 | 将职责集中到某个类的单例中 |
观察者模式 | 将对象从依赖于它的对象中解耦 |
调停者模式 | 将职责集中于某个类,该类可以监督其他对象的交互 |
代理模式 | 让一个对象扮演其他对象的行为 |
职责链模式 | 允许将请求传给职责链的其他对象,直到这个请求被某个对象处理 |
享元模式 | 将共享的、细粒度的对象职责集中管理 |
构造型模式
模式 | 意图 |
构建者模式 | 在请求创建对象前,逐步收集创建对象所需信息 |
工厂方法模式 | 决定推迟实例化类对象 |
抽象工厂模式 | 创建一族具有某些共同特征的对象 |
原型模式 | 根据现有对象创建一个新对象 |
备忘录模式 | 通过包含了对象内部状态的静态版本重新构建一个对象 |
操作型模式
模式 | 意图 |
模板方法模式 | 在方法中实现算法,推迟对算法步骤的定义使得子类能够重新实现 |
状态模式 | 将操作分散,是的每个类都能表示不同的状态 |
策略模式 | 封装操作,使得实现是可以互相替换的 |
命令模式 | 用对象来封装方法调用 |
解释器模式 | 将操作分散,使得每个实现能够运用到不同类型的集合中 |
扩展型模式
模式 | 意图 |
装饰器模式 | 让开发者动态组合对象的行为 |
迭代器模式 | 提供一个方法类顺序访问集合中的元素 |
访问者模式 | 允许开发者定义一个新的操作,而无需改变分层体系中的类 |