目录 -- 设计模式

33 阅读4分钟

一、传统设计模式分类

一、创建型模式 (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)较少使用,但可通过接口实现编译器、复杂数据结构处理

模板方法模式 (Template Method)

二、特有的模式分类

一、并发模式 (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) - 错误处理链

二、中频使用模式

策略模式 - 算法选择 工厂模式 - 对象创建 单例模式 - 全局实例 适配器模式 - 接口兼容 装饰器模式 - 功能增强

三、低频使用模式

解释器模式 - 特定领域语言 访问者模式 - 复杂数据结构 备忘录模式 - 状态保存 享元模式 - 对象共享