一、传统设计模式分类
一、创建型模式 (Creational Patterns)
| 模式 | Go语言特点 | 应用场景 |
|---|
| 单例模式 (Singleton) | 通过sync.Once实现,保证线程安全 | 全局配置、数据库连接池 |
| 工厂方法模式 (Factory Method) | 使用接口和函数返回具体类型 | 对象创建逻辑复杂,需要解耦 |
| 抽象工厂模式 (Abstract Factory) | 创建相关对象的家族 | UI组件库、跨平台工具包 |
| 建造者模式 (Builder) | 通过链式调用和选项模式实现 | 复杂对象构造、HTTP请求构建 |
| 原型模式 (Prototype) | 通过深拷贝实现 | 对象创建成本高,需要复制已有对象 |
二、结构型模式 (Structural Patterns)
| 模式 | Go语言特点 | 应用场景 |
|---|
| 适配器模式 (Adapter) | 通过接口适配不同结构 | 兼容旧接口、第三方库集成 |
| 桥接模式 (Bridge) | 分离抽象和实现,使用组合 | 跨平台应用、多数据库支持 |
| 组合模式 (Composite) | 树形结构,统一处理个体和组合 | 文件系统、UI组件树 |
| 装饰器模式 (Decorator) | 函数包装、中间件模式 | HTTP中间件、日志增强 |
| 外观模式 (Facade) | 简化复杂子系统接口 | API网关、简化复杂库 |
| 享元模式 (Flyweight) | 共享细粒度对象,减少内存 | 连接池、字符缓存 |
| 代理模式 (Proxy) | 控制对象访问,添加额外逻辑 | 缓存代理、权限控制 |
三、行为型模式 (Behavioral Patterns)
| 模式 | Go语言特点 | 应用场景 |
|---|
| 责任链模式 (Chain of Responsibility) | 通过Handler接口和链表实现 | 中间件链、审批流程 |
| 命令模式 (Command) | 函数作为一等公民,易于实现 | 任务队列、撤销操作 |
| 解释器模式 (Interpreter) | 较少使用,但可通过AST实现 | 查询语言、规则引擎 |
| 迭代器模式 (Iterator) | 通过Next()和HasNext()方法 | 集合遍历、分页查询 |
| 中介者模式 (Mediator) | 协调多个对象交互 | 聊天室、事件总线 |
| 备忘录模式 (Memento) | 保存和恢复对象状态 | 撤销功能、快照 |
| 观察者模式 (Observer) | 通过channel和goroutine实现 | 事件驱动、发布订阅 |
| 状态模式 (State) | 通过接口切换不同状态 | 工作流、游戏状态 |
| 策略模式 (Strategy) | 函数作为参数传递 | 排序算法、支付方式 |
| 模板方法模式 (Template Method) | 通过接口定义算法骨架 | 算法框架、工作流程 |
| 访问者模式 (Visitor) | 较少使用,但可通过接口实现 | 编译器、复杂数据结构处理 |
二、特有的模式分类
一、并发模式 (Concurrency Patterns)
| 模式 | 描述 | 实现方式 |
|---|
| Worker Pool | 控制goroutine数量 | channel + goroutine池 |
| Pipeline | 数据处理流水线 | 多个channel连接 |
| Fan-out/Fan-in | 分发和聚合任务 | 多个生产者/消费者 |
| Pub-Sub | 发布订阅 | channel + 主题 |
| Context模式 | 控制goroutine生命周期 | context.Context |
| Select模式 | 多路复用 | select语句 |
| Once模式 | 一次性执行 | sync.Once |
| ErrGroup模式 | 错误处理组 | golang.org/x/sync/errgroup |
二、函数式模式 (Functional Patterns)
| 模式 | 描述 | 示例 |
|---|
| 选项模式 | 灵活的配置 | func(*Config) |
| 函数柯里化 | 分步参数传递 | 返回函数的函数 |
| 函数装饰器 | 包装函数行为 | 中间件模式 |
| 闭包模式 | 捕获外部变量 | 状态保持 |
三、接口模式 (Interface Patterns)
| 模式 | 描述 | 应用 |
|---|
| 空接口模式 | interface{} 或 any | 泛型容器 |
| 接口组合 | 接口嵌入接口 | 扩展接口 |
| 接口断言 | 类型检查 | val, ok := x.(Type) |
| 接口适配 | 适配不同结构 | 适配器模式 |
三、使用频率分类
到时候做个跳转,链接一和二的知识点
一、高频使用模式(Go中特别常见)
选项模式 (Option Pattern) - 替代构造器
中间件模式 (Middleware Pattern) - HTTP处理链
工作池模式 (Worker Pool) - 并发控制
发布订阅 (Pub-Sub) - 事件驱动
错误包装 (Error Wrapping) - 错误处理链
二、中频使用模式
策略模式 - 算法选择
工厂模式 - 对象创建
单例模式 - 全局实例
适配器模式 - 接口兼容
装饰器模式 - 功能增强
三、低频使用模式
解释器模式 - 特定领域语言
访问者模式 - 复杂数据结构
备忘录模式 - 状态保存
享元模式 - 对象共享