设计模式分类

设计模式按照 GoF(Gang of Four) 经典分类,分为三大类、23种模式。下面按类别梳理:


一、创建型模式(Creational)

核心问题:对象怎么创建? 将对象的创建与使用分离。

模式 一句话说明 典型场景
单例 Singleton 全局只有一个实例 配置管理器、线程池、日志器
工厂方法 Factory Method 由子类决定创建哪种对象 日志记录器(文件/数据库/控制台)
抽象工厂 Abstract Factory 创建一族相关对象 跨平台UI(Windows风格/Mac风格控件)
建造者 Builder 分步构建复杂对象 构建复杂的查询语句、组装电脑配置
原型 Prototype 通过克隆已有对象来创建新对象 对象拷贝开销大、需要大量相似对象

二、结构型模式(Structural)

核心问题:类和对象怎么组合? 关注如何组装类/对象形成更大结构。

模式 一句话说明 典型场景
适配器 Adapter 让接口不兼容的类能一起工作 旧系统接口对接新系统、第三方SDK封装
桥接 Bridge 将抽象与实现分离,独立变化 跨平台图形绘制(形状 × 渲染API)
组合 Composite 树形结构,统一处理单个和组合对象 文件系统(文件/文件夹)、菜单/子菜单
装饰器 Decorator 动态地给对象添加额外职责 Java I/O流、给组件加边框/滚动条
外观 Facade 为复杂子系统提供简单入口 一键下单(库存+支付+物流的统一接口)
享元 Flyweight 共享细粒度对象,减少内存 字符串常量池、棋盘棋子、图标缓存
代理 Proxy 为对象提供替身以控制访问 远程代理、缓存代理、权限控制、懒加载

三、行为型模式(Behavioral)

核心问题:对象之间怎么通信? 关注对象间的职责分配和交互方式。

模式 一句话说明 典型场景
策略 Strategy 封装可互换的算法族 排序算法切换、支付方式选择
模板方法 Template Method 定义骨架,子类填充步骤 数据导出流程(读取→处理→输出)
观察者 Observer 一对多依赖,状态变化自动通知 事件监听、消息订阅、MVC中的Model-View
迭代器 Iterator 统一遍历集合的方式 Java的Iteratorfor-each
责任链 Chain of Responsibility 将请求沿处理者链传递 审批流程、过滤器链、异常处理
命令 Command 将请求封装为对象 撤销/重做、任务队列、宏命令
状态 State 对象行为随内部状态改变 订单状态流转、TCP连接状态
访问者 Visitor 在不修改类的前提下定义新操作 编译器对AST节点的不同操作
中介者 Mediator 用一个对象封装对象间的交互 聊天室、航空管制塔台
备忘录 Memento 捕获并恢复对象的历史状态 编辑器撤销、游戏存档
解释器 Interpreter 定义语言的文法并解释执行 正则表达式、SQL解析、规则引擎

四、一张图记住分类逻辑

code
设计模式├── 创建型 → "怎么造?"     → 控制对象创建过程├── 结构型 → "怎么装?"     → 控制对象组合方式└── 行为型 → "怎么动?"     → 控制对象协作方式

五、实用建议

  • 最常用:单例、工厂、策略、观察者、装饰器、代理、模板方法 —— 这7个覆盖了日常80%的场景。
  • 不要为了用模式而用模式,先识别问题(变化点、耦合点),再匹配模式。
  • 很多框架本身就是模式的集合,例如 Spring(工厂+代理+模板方法+观察者)、Java I/O(装饰器+适配器)。