设计模式的资料主要来自sourcemaking和《敏捷软件开发 原则、模式与实践》。
按照sourcemaking,设计模式主要分为
- 构造型模式
- 结构型模式
- 行为型模式
个人认为模式理解难度从低到高。
构造型模式
模式名 | 个人理解 |
---|---|
FACTORY | 由工厂决定创建哪个子类。多个子类,子类实例构造复杂时建议使用。Java中有基于static方法和新建工厂的方式。 |
ABSTRACT FACTORY | 子类实例构造分组,比如多个“平台”,超类包含通用逻辑。“平台”与子类的实例矩阵。 |
BUILDER | 多步创建。如果单步(方法)的参数比较复杂时推荐使用。 |
OBJECT POOL | 对象池,典型如commons-pool,需要考虑并发问题。 |
PROTOTYPE | 以某个实例为蓝本创建其他实例。Java中需要实现clone方法。 |
结构型模式
模式名 | 个人理解 |
---|---|
ADAPTER | 转换一种接口的类到另外一种接口。处理不兼容的接口。 |
BRIDGE | 桥接不同角度的实现。直接子类化存在m*n个子类,桥接后变成m+n个。 |
COMPOSITE | 多个与单个某个表现一致 |
DECORATOR | 用委托代替继承实现功能叠加 |
FACADE | 用一个简单的接口包装复杂的系统 |
FLYWEIGHT | 共享实例工厂 |
PRIVATE CLASS | 数据与行为的分离 |
PROXY | 比DECORATOR更大范围地代替底层对象的行为 |
行为型模式
模式名 | 个人理解 |
---|---|
CHAIN OF RESPONSIBLITY | 找到第一个能处理的类,每个处理器拥有下一个的引用 |
COMMAND | 侧重行为 |
INTREPRETER | 代码中构造“AST” |
MEDIATOR | 同时控制两个类 |
MEMENTO | 用于UNDO,需要originator(作为控制器), caretaker(作为历史记录), memento(作为历史记录项) |
NULL OBJECT | 避免null和null检查,特别是在行为上 |
OBSERVER | 变种LISTENER。存在subject,observer。通知其他类。 |
STATE | 更强大的是状态机模式 |
STAREGY | 分离某个策略 |
TEMPLATE METHOD | 抽象相同的处理逻辑和步骤 |
VISITOR | 双重分发,减少对数据模型的侵入 |
敏捷上补充的一些模式
模式名 | 个人理解 |
---|---|
ACTIVE OBJECT | COMMAND模式的扩展,顺序执行COMMAND同时允许COMMAND产生COMMAND |
MONOSTAR | 使用static变量实现SIGNLETION |
EXTENSION OBJECT | 类扩展 |
STAIRWARY TO HEAVEN | PROXY相关,适合多重继承的语言 |
最后小结一下:重要的是理解各种模式的使用场景,分析并使用。