当前位置: 首页 > news >正文

23种设计模式全面解析

设计模式是解决软件设计中常见问题的经典方案。根据《设计模式:可复用面向对象软件的基础》(GoF),23种设计模式分为以下三类:


一、创建型模式(5种)

目标:解耦对象的创建过程,提高系统灵活性

模式名称核心思想典型应用场景
工厂方法定义创建对象的接口,子类决定实例化哪个类数据库连接器、日志记录器
抽象工厂创建相关或依赖对象的家族,不指定具体类GUI组件库、跨平台系统适配
建造者分步构建复杂对象,分离构造与表示XML解析器、游戏角色生成器
原型通过克隆现有对象来创建新对象对象初始化成本高时的复制操作
单例确保类只有一个实例,提供全局访问点配置管理器、线程池、缓存系统

二、结构型模式(7种)

目标:组合类或对象形成更大的结构

模式名称核心思想典型应用场景
适配器转换接口使不兼容类协同工作旧系统集成、第三方库封装
桥接分离抽象与实现,允许独立变化跨平台绘图引擎、设备驱动程序
组合以树形结构处理整体-部分关系文件系统、GUI容器控件
装饰器动态添加职责,替代继承扩展功能IO流增强、游戏装备系统
外观为复杂子系统提供统一的高层接口API网关、框架入口类
享元共享细粒度对象,减少内存消耗文字编辑器字符对象、棋牌游戏棋子
代理为其他对象提供访问代理,控制访问远程调用、虚拟文件系统、权限控制

三、行为型模式(11种)

目标:优化对象间的通信与职责分配

模式名称核心思想典型应用场景
责任链将请求沿处理链传递,直到被处理审批流程、异常处理机制
命令封装请求为对象,支持撤销/重做操作事务系统、GUI操作历史记录
解释器定义语法的表示与解释方式正则表达式引擎、SQL解析器
迭代器提供顺序访问集合元素的方法集合遍历、树形结构遍历
中介者通过中介对象封装对象间交互聊天室系统、空中交通管制系统
备忘录捕获并保存对象内部状态,支持状态回滚文档版本控制、游戏存档系统
观察者定义对象间的一对多依赖关系(事件驱动)股票行情通知、GUI事件处理
状态封装状态相关行为,允许运行时状态切换订单状态机、游戏角色状态管理
策略定义算法族,使其可互相替换支付方式选择、排序算法切换
模板方法定义算法骨架,子类重写特定步骤框架扩展点、业务流程标准化
访问者在不修改类的前提下为类添加新操作编译器语法树分析、报表生成器

四、模式选择指南

  1. 创建型场景

    • 需要灵活控制对象创建过程 → 工厂/建造者模式
    • 全局唯一访问点 → 单例模式
    • 复杂对象复制 → 原型模式
  2. 结构型场景

    • 接口不兼容 → 适配器模式
    • 动态功能扩展 → 装饰器模式
    • 资源优化 → 享元模式
  3. 行为型场景

    • 事件驱动系统 → 观察者模式
    • 算法切换 → 策略模式
    • 状态管理 → 状态模式
    • 操作记录 → 命令模式

五、经典模式对比

对比维度工厂方法 vs 抽象工厂装饰器 vs 代理策略 vs 状态
核心区别生产单个对象 vs 对象家族增强功能 vs 控制访问算法替换 vs 状态驱动行为变化
扩展方向垂直扩展(子类化)横向扩展(功能叠加)算法扩展 vs 状态扩展
典型场景单一产品创建 vs 跨平台UI组件库IO流增强 vs 远程服务代理支付方式选择 vs 订单状态机

六、实际应用建议

  1. 避免过度设计

    • 优先解决实际问题,而非强制使用模式
    • 简单if-else能解决的不要用策略模式
  2. 模式组合使用

    • 工厂方法+原型:高效创建复杂对象
    • 观察者+命令:实现事件驱动的撤销操作
  3. 框架集成

    • Spring:工厂模式(BeanFactory)
    • React:观察者模式(State更新)
    • Node.js:中间件模式(责任链变体)

掌握设计模式的关键在于理解其本质思想,而非机械套用。建议结合具体项目实践,从简单模式(如策略、观察者)开始逐步深入,最终达到"无招胜有招"的设计境界。

相关文章:

  • React 受控表单绑定基础
  • 【HDFS入门】HDFS性能调优实战:从基准测试到优化策略
  • unity TEngine学习记录3
  • 手撕STL——vector
  • 设计模式 --- 装饰器模式
  • 英码科技与泊川软件,携手加速AI与嵌入式系统融合创新
  • Spring-Ioc容器的加载过程?
  • 计算机网络——网络模型
  • JAVA设计模式:注解+模板+接口
  • 极狐GitLab 注册限制如何设置?
  • 23种设计模式-创建型模式之建造者模式(Java版本)
  • 极狐GitLab 外部授权控制机制是怎样的?
  • PHP腾讯云人脸核身获取NONCE ticket
  • pytorch基本操作2
  • 十、数据库day02--SQL语句01
  • Python Logger用法和说明
  • 【重学Android】1.关于@Composer注解的一点知识笔记
  • UI自动化测试介绍及入门
  • go 语言切片 深入理解实例
  • Python作业4 文本词云统计,生成词云
  • 探索演艺产业新路径,2万观众走进音乐科技融创节
  • 西湖大学本科招生新增三省两市,首次面向上海招生
  • 油电同智,安全超充!从上海车展看中国汽车产业先发优势
  • 高璞任中国第一汽车集团有限公司党委常委、副总经理
  • 103岁抗战老兵、抗美援朝老兵、医学专家张道中逝世
  • 哈马斯同意释放剩余所有以色列方面被扣押人员,以换取停火五年