🌟 设计模式三大类型概述
设计模式根据其核心目的被分为三大类,构成软件设计的"黄金三角":
分类 | 核心关注点 | 比喻说明 | 典型模式数量 |
---|---|---|---|
创建型 | 对象创建机制 | "造物主"——控制对象的诞生方式 | 5种 |
结构型 | 对象组合方式 | "建筑师"——设计对象间的结构关系 | 7种 |
行为型 | 对象交互通信 | "协调者"——管理对象的行为协作 | 11种 |
🏗 创建型模式(5种)——解决"对象怎么来"
1. 工厂方法(Factory Method)
-
核心:让子类决定实例化哪个类
-
场景:日志记录器、支付网关等需要扩展的创建场景
-
示例:
java
复制
interface Payment { void pay(); } class Alipay implements Payment { /*...*/ } class WechatPay implements Payment { /*...*/ } abstract class PaymentFactory { abstract Payment create(); }
2. 抽象工厂(Abstract Factory)
-
核心:创建相关产品家族
-
场景:跨平台UI组件(Windows/macOS风格按钮+菜单)
-
特点:比工厂方法更高维度的抽象
3. 原型(Prototype)
-
核心:通过克隆现有对象来创建新对象
-
场景:游戏怪物生成、复杂对象初始化成本高时
4. 单例(Singleton)
-
核心:确保类只有一个实例
-
场景:数据库连接池、配置管理器
-
线程安全实现:
java
复制
class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
5. 生成器(Builder)
-
核心:分步构建复杂对象
-
场景:定制电脑配置、SQL查询构建
-
现代变体:
java
复制
Computer pc = new Computer.Builder() .cpu("i7") .ram("16GB") .build();
🧩 结构型模式(7种)——解决"对象怎么组合"
1. 适配器(Adapter)
-
核心:转换接口使得不兼容的类可以协作
-
类型:
-
类适配器(继承)
-
对象适配器(组合)
-
2. 桥接(Bridge)
-
核心:将抽象与实现解耦
-
场景:跨平台图形渲染(OpenGL/Vulkan)
3. 组合(Composite)
-
核心:用树形结构处理部分-整体关系
-
场景:文件系统、UI组件嵌套
4. 装饰器(Decorator)
-
核心:动态添加职责
-
特点:比继承更灵活
-
示例:
java
复制
interface Coffee { double cost(); } class SimpleCoffee implements Coffee { /*...*/ } class MilkDecorator implements Coffee { private Coffee decorated; public double cost() { return decorated.cost() + 0.5; } }
5. 外观(Facade)
-
核心:为复杂子系统提供统一入口
-
场景:编译器前端接口
6. 享元(Flyweight)
-
核心:共享细粒度对象
-
关键:区分内部状态(共享)和外部状态(非共享)
-
场景:文字编辑器中的字符对象
7. 代理(Proxy)
-
类型对比:
类型 目的 示例 虚拟代理 延迟初始化 图片懒加载 保护代理 访问控制 权限验证 远程代理 网络通信 RPC调用
🤝 行为型模式(11种)——解决"对象怎么协作"
1. 职责链(Chain of Responsibility)
-
核心:使多个对象都有机会处理请求
-
场景:审批系统、异常处理
2. 命令(Command)
-
进阶应用:
-
宏命令(组合多个命令)
-
事务回滚(undo操作)
-
3. 迭代器(Iterator)
-
现代语言支持:
-
Java的
Iterable
接口 -
Python的
__iter__
协议
-
4. 中介者(Mediator)
-
核心:用中介对象封装一组对象交互
-
场景:聊天室、机场塔台调度
5. 备忘录(Memento)
-
实现要点:
-
Originator(原发器)负责创建/恢复备忘录
-
Caretaker(管理者)仅存储备忘录
-
6. 观察者(Observer)
-
发布-订阅变体:
java
复制
class EventBus { private Map<String, List<Consumer>> subscribers = new HashMap<>(); void subscribe(String event, Consumer listener) { /*...*/ } void publish(String event, Object data) { /*...*/ } }
7. 状态(State)
-
与策略模式区别:
-
状态模式:状态驱动行为改变(自动转换)
-
策略模式:客户端主动切换算法
-
8. 策略(Strategy)
-
Java 8+实现:
java
复制
interface BillingStrategy { double calculate(double price); } BillingStrategy normal = price -> price; BillingStrategy discount = price -> price * 0.8;
9. 模板方法(Template Method)
-
好莱坞原则:"Don't call us, we'll call you"
-
示例:
java
复制
abstract class Game { final void play() { // 模板方法 initialize(); startPlay(); endPlay(); } abstract void initialize(); }
10. 访问者(Visitor)
-
双分派机制:
java
复制
interface Element { void accept(Visitor v); } class ConcreteElement implements Element { public void accept(Visitor v) { v.visit(this); // 第二次分派 } }
11. 解释器(Interpreter)
-
场景:SQL解析、正则表达式处理
-
经典实现:抽象语法树(AST)
🔍 模式关系网络
mermaid
复制
graph TD A[工厂方法] --> B[抽象工厂] C[组合] --> D[迭代器] E[观察者] --> F[中介者] G[策略] --> H[状态] I[装饰器] --> J[代理] K[命令] --> L[备忘录]
💡 设计智慧:
创建型模式是土壤,孕育对象生命
结构型模式是骨架,构建系统框架
行为型模式是神经,协调对象交互
掌握这23种设计模式,就拥有了应对软件复杂性的完整工具箱!