Repository navigation
11 design patterns reference
omeyang edited this page Sep 16, 2026
·
1 revision
本文档是设计模式参考清单,供开发中遇到问题时查阅。
使用原则:仅供参考,不强制使用任何模式,根据实际场景灵活选择。
核心理念:优先使用简单方案,只在必要时考虑模式。
- 遇到重复代码、复杂依赖、扩展性问题时
- 需要提高代码可维护性时
- 团队协作需要统一解决方案时
- 预先定义所有模式
- 为了使用模式而强行套用
- 过度设计和过度抽象
- 脱离实际场景的理论实现
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 断路器 (Circuit Breaker) | 防止级联故障 | 外部服务调用、数据库连接池 |
| 重试 (Retry) | 处理临时故障 | 网络抖动、临时性错误 |
| 隔层 (Bulkhead) | 资源隔离 | 协程池隔离、连接池隔离 |
| 限流 (Throttling) | 流量控制 | API 限流、资源保护 |
| 超时 (Timeout) | 防止资源长时间占用 | 所有外部调用 |
| 健康检查 (Health Endpoint Monitoring) | 服务健康监控 | 微服务健康探测 |
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 缓存端 (Cache-Aside) | 旁路缓存 | 热点数据缓存、配置缓存 |
| 预加载 (Preload) | 数据预加载 | 启动时加载全量数据到内存 |
| CQRS | 读写分离 | 读多写少的场景 |
| 事件溯源 (Event Sourcing) | 事件驱动 | 状态变更追踪、审计日志 |
| 异步处理 (Async Request-Reply) | 耗时任务异步化 | 批量导入、数据处理 |
| 队列削峰 (Queue-Based Load Leveling) | 流量削峰 | 消息队列缓冲 |
| 对象池 (Object Pool) | 对象复用 | 连接池、协程池 |
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 工厂方法 (Factory Method) | 对象创建 | 创建不同类型的对象 |
| 抽象工厂 (Abstract Factory) | 创建对象家族 | 多环境配置创建 |
| 生成器 (Builder) | 复杂对象构建 | 多参数对象、查询条件 |
| 单例 (Singleton) | 全局唯一实例 | 配置管理、连接池 |
| 原型 (Prototype) | 对象克隆 | 配置模板复制 |
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 适配器 (Adapter) | 接口适配 | 统一不同库的接口 |
| 桥接 (Bridge) | 抽象与实现分离 | 多种数据库实现 |
| 组合 (Composite) | 树形结构 | 组织层级、分组结构 |
| 装饰 (Decorator) | 动态扩展功能 | 中间件、插件 |
| 外观 (Facade) | 统一接口 | 复杂子系统封装 |
| 享元 (Flyweight) | 对象共享 | 内存优化 |
| 代理 (Proxy) | 访问控制 | 缓存代理、权限控制 |
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 责任链 (Chain of Responsibility) | 请求链式处理 | 验证链、匹配规则链 |
| 命令 (Command) | 请求封装 | 操作记录、撤销重做 |
| 中介者 (Mediator) | 对象交互中介 | 事件总线、消息分发 |
| 观察者 (Observer) | 状态变化通知 | 事件通知、数据变更 |
| 状态 (State) | 状态变化行为 | 状态机、工作流 |
| 策略 (Strategy) | 算法替换 | 多种算法选择 |
| 模板方法 (Template Method) | 算法骨架 | 流程模板、公共步骤 |
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 网关卸载 (Gateway Offloading) | 统一认证/限流 | API Gateway |
| 防损层 (Anti-Corruption Layer) | 隔离遗留系统 | 旧系统适配 |
| 模式 | 用途 | 适用场景 |
|---|---|---|
| 外部配置存储 (External Configuration Store) | 配置中心 | 动态配置、多环境配置 |
| 挎斗 (Sidecar) | 边车模式 | 日志收集、监控代理 |
| Strangler Fig | 增量迁移 | 旧系统逐步替换 |
| 蓝绿部署 (Blue-Green) | 无缝部署 | 零停机部署 |
| 金丝雀发布 (Canary) | 灰度发布 | 风险控制 |
| 库名 | 模式 | 用途 |
|---|---|---|
github.com/sony/gobreaker |
断路器 | 防止级联故障 |
github.com/cenkalti/backoff |
重试 | 指数退避重试 |
golang.org/x/time/rate |
限流 | 令牌桶限流器 |
go.uber.org/ratelimit |
限流 | 漏桶限流器 |
| 库名 | 模式 | 用途 |
|---|---|---|
github.com/dgraph-io/ristretto/v2 |
缓存 | 高性能本地缓存 |
github.com/redis/go-redis/v9 |
缓存 | Redis 客户端 |
github.com/panjf2000/ants/v2 |
对象池 | Goroutine 池 |
sync.Pool(标准库) |
对象池 | 对象复用 |
| 库名 | 模式 | 用途 |
|---|---|---|
github.com/apache/pulsar-client-go |
事件溯源 | Pulsar 客户端 |
github.com/confluentinc/confluent-kafka-go/v2 |
事件溯源 | Kafka 客户端 |
github.com/hibiken/asynq |
异步处理 | 异步任务队列 |
遇到问题
|
是否有简单方案? ---------> 是 --> 直接实现
| 否
问题是否重复出现? -------> 否 --> 直接实现
| 是
查阅模式参考手册
|
是否有合适的模式? -------> 否 --> 自定义方案
| 是
评估成本收益
|
收益 > 成本? ------------> 否 --> 简化方案
| 是
应用模式 + 文档记录
- GoF 设计模式:《设计模式:可复用面向对象软件的基础》
- 云设计模式:https://learn.microsoft.com/zh-cn/azure/architecture/patterns/
- Go 设计模式:https://refactoring.guru/design-patterns/go
- Uber Go 风格指南:https://github.com/uber-go/guide
- Go 并发模式:https://go.dev/blog/pipelines
本页由 Maat 仓库的 scripts/sync-wiki.sh 自动生成,请勿直接编辑。