Skip to content

设计模式

设计模式(Design Patterns)是软件开发中反复出现的问题的通用解决方案,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides(GoF 四人组)在 1994 年系统总结,共 23 种经典模式。

一、设计模式六大原则

原则英文核心思想
单一职责原则SRP(Single Responsibility Principle)一个类只负责一个职责
开闭原则OCP(Open-Closed Principle)对扩展开放,对修改关闭
里氏替换原则LSP(Liskov Substitution Principle)子类可以替换父类且行为不变
接口隔离原则ISP(Interface Segregation Principle)接口应该小而专一,不强迫实现不需要的方法
依赖倒置原则DIP(Dependency Inversion Principle)依赖抽象,不依赖具体实现
迪米特法则LoD(Law of Demeter)最少知识原则,只与直接朋友通信

SOLID = SRP + OCP + LSP + ISP + DIP

二、23 种设计模式分类

创建型模式(5 种)

关注对象的创建过程,将对象的创建与使用分离。

模式一句话描述
单例模式确保类只有一个实例
工厂方法模式子类决定创建哪个对象
抽象工厂模式创建一系列相关对象
建造者模式分步骤构建复杂对象
原型模式通过克隆创建对象

结构型模式(7 种)

关注类和对象的组合,形成更大的结构。

模式一句话描述
适配器模式转换接口,让不兼容的类一起工作
桥接模式分离抽象与实现,各自独立变化
组合模式树形结构处理整体与部分
装饰器模式动态给对象添加功能
外观模式提供统一的高层接口
享元模式共享细粒度对象,节省内存
代理模式控制对对象的访问

行为型模式(11 种)

关注对象间的通信和职责分配。

模式一句话描述
责任链模式请求沿链传递,直到被处理
命令模式将请求封装为对象
解释器模式定义语言的文法并解释
迭代器模式统一遍历集合元素
中介者模式用中介对象封装交互
备忘录模式保存和恢复对象状态
观察者模式一对多依赖通知
状态模式对象状态改变时改变行为
策略模式算法族可互相替换
模板方法模式定义算法骨架,子类实现细节
访问者模式在不改变元素类的前提下定义新操作

三、模式之间的关系

创建型模式(对象创建)

    ├── 单例 ──→ 享元(共享实例思想)
    ├── 工厂方法 ──→ 抽象工厂(扩展维度)
    ├── 建造者 ──→ 组合(构建复杂对象)
    └── 原型 ──→ 备忘录(状态保存/恢复)

结构型模式(对象组合)

    ├── 适配器 ──→ 外观(接口转换思想)
    ├── 装饰器 ──→ 代理(包装对象,增强功能)
    ├── 桥接 ──→ 策略(分离变化维度)
    └── 组合 ──→ 责任链(树形递归结构)

行为型模式(对象通信)

    ├── 策略 ──→ 状态(算法/行为切换)
    ├── 观察者 ──→ 中介者(通信方式变化)
    ├── 模板方法 ──→ 策略(继承 vs 组合)
    └── 命令 ──→ 备忘录(操作记录与撤销)

四、学习路线建议

入门必学(5 个):
  单例 → 工厂方法 → 策略 → 观察者 → 代理
  → 这 5 个最常用,几乎每个项目都会遇到

进阶学习(8 个):
  装饰器 → 模板方法 → 责任链 → 建造者 → 适配器
  → 外观 → 组合 → 状态

深入理解(10 个):
  抽象工厂 → 原型 → 桥接 → 享元 → 命令
  → 迭代器 → 中介者 → 备忘录 → 访问者 → 解释器