设计模式笔记1

设计模式的资料主要来自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相关,适合多重继承的语言

最后小结一下:重要的是理解各种模式的使用场景,分析并使用。