设计模式23种
创建型
对象的创建。5
| 创建型 | 定义 | 可变部分(允许独立变化,而又不会导致重新设计) |
|---|---|---|
| 工厂方法 Factory Method |
定义创建对象的接口,让子类决定实例化 | 被实例化的子类 |
| 抽象工厂 Abstract Factory |
提供创建一系列相关或依赖对象的接口,无需指定具体类 | 产品对象家族 |
| 原型 Prototype |
拷贝原型,创建新对象 | 被实例化的类 |
| 单例 Singleton |
一个类仅有一个实例 | 一个类的唯一实例 |
| 建造者 Builder |
复杂对象的构建与表示分离,构建过程创建不同的表示 | 如何创建一个组合对象 |
结构型
处理类或对象的组合。7
| 结构型 | 定义 | 可变部分 |
|---|---|---|
| 适配器 Adapter |
类的接口转换,不兼容的类可以一起工作 | 对象的接口 |
| 桥接 Bridge |
类的抽象与实现分离,都可以独立地变化 | 对象的实现 |
| 组合 Composite |
对象组合成树形结构,使用具有一致性 | 一个对象的结构和组成 |
| 装饰者 Decorator |
动态添加额外的职责,扩展功能更灵活 | 对象的职责,不生成子类 |
| 外观 Facade |
一组接口提供一个高层接口,使子系统更加容易使用 | 一个子系统的接口 |
| 享元 Flyweight |
共享支持细粒度对象 | 对象的存储开销 |
| 代理 Proxy |
其他对象代理控制这个对象的访问 | 如何访问一个对象;该对象的位置 |
行为型
对象间的通信。11
| 行为型 | 定义 | 可变部分 |
|---|---|---|
| 解释器 Interpreter |
给定语言,定义文法表示和解释器,解释句子 | 一个语言的文法及解释 |
| 模板方法 Template Method |
定义操作的骨架,将一些步骤延迟到子类中 | 算法中的某些步骤 |
| 职责链 Chain of Responsibility |
为解除耦合,使多个对象都有机会处理这个请求 | 满足一个请求的对象 |
| 命令 Command |
请求封装为对象,参数化请求,可取消操作 | 何时、怎样满足一个请求 |
| 迭代器 Iterator |
顺序访问聚合对象 | 如何遍历各元素 |
| 中介者 Mediator |
中介对象封装对象交互 | 对象间交互 |
| 备忘录 Memento |
捕获对象的内部状态并保存,可将对象恢复 | 哪些私有信息,何时存储 |
| 观察者 Observer |
一个对象的状态发生改变,所有依赖对象都得到通知并刷新 | 多个对象依赖于另外一个对象,如何保持一致 |
| 状态 State |
对象内部状态改变时改变它的行为 | 对象的状态 |
| 策略 Strategy |
一系列的算法,可替换 | 算法 |
| 访问者 Visitor |
不改变各类的前提下定义新操作 | 某些可作用于一个/组对象的操作,但不修改这些对象的类 |
UML类图

其中,
| 关系 | 说明 | 备注 |
|---|---|---|
| 依赖 ----> | 临时性的关联,最弱 | 常用于 局部变量、函数参数、返回值等 |
| 关联 \(\longrightarrow\) | 引用关系 | 单向/双向,常用于 类的属性表达 |
| 聚合 | 整体 contains 局部 | 常用于 构造、Setter或业务方法,可单独存在 |
| 组合 | 整体 has 局部 | 在整体构造方法中实例化,同生命周期 |
| 多重性 | 通常在关联、聚合、组合中使用 | N...N(*) |

浙公网安备 33010602011771号