用代码说话,让设计模式不再只是课本上的概念。
本仓库通过 可运行的代码示例 展示 23 种经典设计模式,每种模式都配有详细说明、适用场景分析以及多语言实现。无论你是初学者还是想温故知新的老手,这里都能帮你把抽象的模式概念变成具体的编码直觉。
| 模式 | 一句话 | 经典场景 |
|---|---|---|
| 单例 | 全局只一个实例 | 配置管理器、日志记录器 |
| 工厂方法 | 子类决定创建什么 | 日志框架选择不同输出方式 |
| 抽象工厂 | 创建一族相关对象 | 跨平台 UI 组件库 |
| 建造者 | 分步骤组装复杂对象 | 构造 SQL 查询、组装 HTTP 请求 |
| 原型 | 克隆已有对象而非新建 | 游戏中批量生成相似角色 |
| 模式 | 一句话 | 经典场景 |
|---|---|---|
| 适配器 | 让不兼容的接口能一起工作 | 新旧系统对接、第三方 SDK 适配 |
| 桥接 | 拆开抽象和实现各自变化 | 多渲染引擎 + 多平台 |
| 组合 | 树形结构统一处理 | 文件系统、UI 组件树 |
| 装饰器 | 动态叠加功能 | 日志/缓存/权限逐层包装 |
| 外观 | 复杂子系统简化入口 | 一键启动流程封装多个子系统调用 |
| 享元 | 共享细粒度对象省内存 | 游戏中的粒子/棋子 |
| 代理 | 加个中间人控制访问 | 远程代理、延迟加载、权限拦截 |
| 模式 | 一句话 | 经典场景 |
|---|---|---|
| 责任链 | 请求沿链传递直到有人处理 | 审批流、异常处理栈 |
| 命令 | 把请求封装成对象 | 任务队列、撤销/重做 |
| 解释器 | 给语法规则写解释器 | 规则引擎、正则表达式 |
| 迭代器 | 统一遍历集合的方式 | 自定义集合的 for 循环 |
| 中介者 | 对象不直接交互,通过中间人 | 聊天室、UI 事件总线 |
| 备忘录 | 存档再恢复 | 游戏存档、编辑器撤销 |
| 观察者 | 一变大家跟着变 | 事件订阅、消息推送 |
| 状态 | 状态决定行为 | 订单流程(待付→已付→发货→完成) |
| 策略 | 不同算法可互换 | 排序策略、折扣策略 |
| 模板方法 | 父类定骨架,子类填细节 | 测试框架、数据处理流水线 |
| 访问者 | 给对象加操作而不改对象类 | 编译器 AST 分析 |
design-patterns/
├── creational/ # 创建型模式
│ ├── singleton/ # 单例
│ ├── factory-method/ # 工厂方法
│ ├── abstract-factory/ # 抽象工厂
│ ├── builder/ # 建造者
│ └── prototype/ # 原型
├── structural/ # 结构型模式
│ ├── adapter/ # 适配器
│ ├── bridge/ # 桥接
│ ├── composite/ # 组合
│ ├── decorator/ # 装饰器
│ ├── facade/ # 外观
│ ├── flyweight/ # 享元
│ └── proxy/ # 代理
├── behavioral/ # 行为型模式
│ ├── chain-of-responsibility/ # 责任链
│ ├── command/ # 命令
│ ├── interpreter/ # 解释器
│ ├── iterator/ # 迭代器
│ ├── mediator/ # 中介者
│ ├── memento/ # 备忘录
│ ├── observer/ # 观察者
│ ├── state/ # 状态
│ ├── strategy/ # 策略
│ ├── template-method/ # 模板方法
│ └── visitor/ # 访问者
└── README.md # 本文件
每个模式目录下包含:
README.md— 模式说明、适用场景、UML 类图src/— 代码示例(含多语言实现)test/— 测试用例
-
克隆仓库:
git clone https://github.com/your-username/design-patterns.git cd design-patterns -
进入某个模式目录,查看该模式下的
README.md获取环境设置和运行说明。 -
每个示例都可以独立运行,无需依赖其他模式。
欢迎任何形式的贡献!提交前请注意:
- 代码风格:遵循各语言目录下的编码规范
- 新增模式:确保包含 README 说明 + 至少一种语言实现 + 测试用例
- 新增语言实现:在已有模式目录的
src/下添加,并在 README 中补充说明 - 提交格式:
<模式名>: <简述>,如singleton: add Kotlin implementation - Issue 优先:大的改动建议先开 Issue 讨论
本项目基于 MIT License 发布,可自由使用、修改和分发。
- 经典参考:Design Patterns: Elements of Reusable Object-Oriented Software(GoF)
- 开源社区的无私分享,让知识持续流动