Appearance
考点清单
- [x] 设计模式层次(架构模式/设计模式/惯用法)
- [x] 创建型模式(单例/工厂方法/抽象工厂/建造者/原型)
- [x] 结构型模式(适配器/桥接/组合/装饰/外观/享元/代理)
- [x] 行为型模式(观察者/策略/模板方法/命令/状态/责任链/迭代器/中介者/备忘录/解释器/访问者)
- [x] 桥接模式详解
笔记
一、设计模式层次
| 层次 | 说明 | 粒度 |
|---|---|---|
| 架构模式 | 软件系统整体结构,高层模式 | 大 |
| 设计模式 | 子系统或组件的设计方案 | 中 |
| 惯用法 | 特定语言相关的编程技巧 | 小 |
二、三大类设计模式总览 ★
创建型模式(5种)
| 模式 | 核心思想 | 一句话 |
|---|---|---|
| 单例(Singleton) | 一个类仅有一个实例,提供全局访问点 | 唯一实例 |
| 工厂方法(Factory Method) | 定义创建对象的接口,子类决定实例化哪个类 | 子类决定创建什么 |
| 抽象工厂(Abstract Factory) | 创建一系列相关对象,无需指定具体类 | 产品族 |
| 建造者(Builder) | 复杂对象的构建与表示分离 | 分步构造 |
| 原型(Prototype) | 通过复制现有对象创建新对象 | 克隆 |
口诀:单原建,工抽分。(单例/原型/建造者/工厂方法/抽象工厂)
结构型模式(7种)
| 模式 | 核心思想 | 一句话 |
|---|---|---|
| 适配器(Adapter) | 将接口转换为客户期望的另一个接口 | 接口转换 |
| 桥接(Bridge) | 抽象与实现分离,独立变化 | 多维变化分离 |
| 组合(Composite) | 将对象组成树形结构,统一处理单个对象和组合 | 部分-整体 |
| 装饰(Decorator) | 动态给对象添加额外职责 | 包装增强 |
| 外观(Facade) | 为子系统中的一组接口提供统一入口 | 简化接口 |
| 享元(Flyweight) | 共享大量细粒度对象,减少内存占用 | 共享复用 |
| 代理(Proxy) | 为其他对象提供代理以控制访问 | 控制访问 |
口诀:适桥组装外享代。
行为型模式(11种)
| 模式 | 核心思想 | 一句话 |
|---|---|---|
| 观察者(Observer) | 一对多依赖,一对象状态变化通知所有依赖者 | 发布-订阅 |
| 策略(Strategy) | 定义一系列算法,可相互替换 | 算法族 |
| 模板方法(Template Method) | 定义算法骨架,子类重定义某些步骤 | 骨架不变子类填空 |
| 命令(Command) | 将请求封装为对象,支持撤销/排队 | 请求封装 |
| 状态(State) | 对象行为随内部状态改变 | 状态决定行为 |
| 责任链(Chain of Responsibility) | 多个对象处理同一请求,形成链条 | 传递处理 |
| 迭代器(Iterator) | 顺序访问集合元素而不暴露内部表示 | 遍历 |
| 中介者(Mediator) | 用中介对象封装一系列对象交互 | 中心协调 |
| 备忘录(Memento) | 捕获对象内部状态,支持撤销 | 快照/回滚 |
| 解释器(Interpreter) | 定义语言文法并解释执行 | 语法解释 |
| 访问者(Visitor) | 在不改变元素类的前提下定义新操作 | 操作分离 |
口诀:观策模命状,责迭中备解访。
三、桥接模式详解 ★
桥接模式将抽象部分与它的实现部分分离,使它们可以独立变化。是比多重继承更好的解决方法(多重继承违背单一职责原则)。
四个角色:
| 角色 | 作用 |
|---|---|
| Abstraction(抽象类) | 定义抽象类接口,维护 Implementor 指针 |
| RefinedAbstraction(扩充抽象类) | 扩充由 Abstraction 定义的接口 |
| Implementor(实现类接口) | 定义实现类接口,提供基本操作(可与 Abstraction 完全不同) |
| ConcreteImplementor(具体实现类) | 实现 Implementor 接口的具体实现 |
Abstraction 定义高层操作(基于基本操作),Implementor 仅提供基本操作。二者接口可以完全不同,独立变化。