| name | design-patterns-guide |
| description | 设计模式指南 - 22种经典设计模式的中文参考手册。当用户需要选择合适的设计模式、改善代码架构、解决对象创建/组合/通信问题时使用。触发词:设计模式、design pattern、工厂模式、单例、观察者、策略模式、适配器、代理、装饰器、架构设计。基于 Refactoring.Guru 的权威内容。 |
设计模式指南
基于 Refactoring.Guru 的 22 种经典设计模式中文参考手册。
使用方式
- 识别问题类型 - 通过总体路由定位问题领域
- 选择模式 - 通过决策树选择合适的设计模式
- 参考实现 - 查看详细文档和代码示例
总体决策路由
flowchart TD
Start[需要设计模式] --> Q1{核心问题是什么?}
Q1 -->|对象创建| CAT1[创建型模式]
Q1 -->|对象组合/结构| CAT2[结构型模式]
Q1 -->|对象通信/行为| CAT3[行为模式]
CAT1 --> Q2{创建方面的具体问题?}
Q2 -->|不想暴露具体类| T1[工厂方法]
Q2 -->|创建相关对象族| T2[抽象工厂]
Q2 -->|分步构建复杂对象| T3[生成器]
Q2 -->|复制现有对象| T4[原型]
Q2 -->|全局唯一实例| T5[单例]
CAT2 --> Q3{结构方面的具体问题?}
Q3 -->|接口不兼容| T6[适配器]
Q3 -->|分离抽象与实现| T7[桥接]
Q3 -->|树形结构| T8[组合]
Q3 -->|动态添加功能| T9[装饰]
Q3 -->|简化复杂子系统| T10[外观]
Q3 -->|大量相似对象| T11[享元]
Q3 -->|控制对象访问| T12[代理]
CAT3 --> Q4{行为方面的具体问题?}
Q4 -->|请求的发送者与接收者解耦| Q5{具体需求?}
Q5 -->|多个对象依次处理| T13[责任链]
Q5 -->|将请求封装为对象| T14[命令]
Q4 -->|遍历集合| T15[迭代器]
Q4 -->|对象间通信| Q6{具体需求?}
Q6 -->|通过中介者通信| T16[中介者]
Q6 -->|状态变化通知| T17[观察者]
Q4 -->|对象状态管理| Q7{具体需求?}
Q7 -->|状态改变行为| T18[状态]
Q7 -->|保存/恢复状态| T19[备忘录]
Q4 -->|算法/行为选择| Q8{具体需求?}
Q8 -->|运行时切换算法| T20[策略]
Q8 -->|定义算法骨架| T21[模板方法]
Q4 -->|对不同类型的统一操作| T22[访问者]
style Start fill:#e1f5fe
style CAT1 fill:#fff3e0
style CAT2 fill:#e8f5e9
style CAT3 fill:#fce4ec
创建型模式决策树
flowchart TD
Start[对象创建问题] --> Q1{问题是什么?}
Q1 -->|不知道具体要创建哪个类| Q2{需要创建一族相关对象?}
Q2 -->|是| A1[抽象工厂<br/>Abstract Factory]
Q2 -->|否| A2[工厂方法<br/>Factory Method]
Q1 -->|对象构建过程复杂| Q3{需要分步构建?}
Q3 -->|是| A3[生成器<br/>Builder]
Q3 -->|否| Q4{需要多种表示?}
Q4 -->|是| A3
Q4 -->|否| A2
Q1 -->|需要复制对象| Q5{对象结构复杂?}
Q5 -->|是| A4[原型<br/>Prototype]
Q5 -->|否| 直接new
Q1 -->|需要唯一实例| Q6{需要延迟初始化?}
Q6 -->|是| A5[单例<br/>Singleton]
Q6 -->|否| A5
A1 --> |使用场景| U1[跨平台UI组件<br/>数据库访问层]
A2 --> |使用场景| U2[框架扩展点<br/>解耦创建逻辑]
A3 --> |使用场景| U3[复杂对象构建<br/>多步骤配置]
A4 --> |使用场景| U4[避免昂贵的初始化<br/>运行时配置复制]
A5 --> |使用场景| U5[配置管理器<br/>日志记录器<br/>连接池]
style A1 fill:#c8e6c9
style A2 fill:#c8e6c9
style A3 fill:#c8e6c9
style A4 fill:#c8e6c9
style A5 fill:#c8e6c9