一.设计模式的基本概念

一.核心概念

对软件设计中重复出现问题的成熟解决方案,提供代码可重用性、可维护性和扩展性保障。核心原则包括:

1.1. 单一职责原则

  • 定义‌:一个类只承担一个职责,避免因职责过多导致的代码耦合。

1.2. 开闭原则

  • 定义‌:应对扩展开放,对修改关闭。
  • 说明‌:允许添加新功能而不破坏现有系统,已有代码应尽可能保持稳定不修改。

3. 里氏替换原则

  • 定义‌:子类必须能替换父类且不影响程序正确性
  • 说明:子类不改变父类原有行为,仅扩展功能。

1.4. 接口隔离原则

  • 定义‌:类不应依赖不需要的接口,需将庞大接口拆分为多个独立小接口
  • 说明‌:减少接口污染,避免类因无关方法被迫变更

1.5. 依赖倒置原则

  • 定义‌:高层模块不依赖低层模块,二者应共同依赖抽象
  • 说明‌:通过接口编程解耦。

1.6. 迪米特法则

  • 定义‌(最少知道原则):对象仅与直接朋友交互,减少与非直接类的依赖。
  • 说明‌:降低耦合,如A调用B,B调用C时,A无需知晓C的存在。

二.分类体系

2.1.创建型

解耦对象创建过程.

设计模式 解耦手段 适用场景
‌工厂方法模式‌ 子类实现工厂接口,封装具体对象的实例化过程 需动态切换同类型对象(如不同数据库连接)
‌抽象工厂模式‌ 提供接口创建‌一组关联对象‌,隔离产品族依赖 跨平台UI组件、多套数据库适配等场景
‌建造者模式‌ 分离复杂对象的‌构建步骤‌与表示方式 构造含多部件的对象(如订单、配置对象)
‌原型模式‌ 通过复制原型实例创建新对象,绕过显式构造函数 创建成本高的对象(如深度克隆配置模板)
‌单例模式‌ 全局唯一访问点,避免重复创建实例 资源管理器、配置中心等需全局唯一性的场景

2.2.结构型

处理类/对象间的组合关系(包括组合、聚合和依赖关系)

2.2.1什么是组合关系?

关系类型 生命周期依赖 典型模式应用 案例说明
‌组合关系‌ (‌Composition‌) ‌强绑定‌:部分对象不能独立于整体存在 (整体销毁则部分销毁) ‌组合模式‌:文件夹(整体)删除时,其内部文件(部分)同步销毁 汽车引擎脱离汽车即失去功能意义
‌聚合关系‌ (‌Aggregation‌) ‌弱绑定‌:部分对象可独立于整体存在 ‌装饰器模式‌:移除咖啡的"牛奶装饰层"后,原始咖啡对象仍有效5 ‌享元模式‌:棋子对象池独立于棋局存在 班级解散后,学生仍可作为独立个体存在
‌依赖关系‌ (‌Dependency‌) ‌临时性‌:通过参数传递临时使用对象 ‌代理模式‌:客户端通过代理对象间接访问真实对象(如网络请求代理) ‌适配器模式‌:适配器临时调用被适配对象 支付接口适配器中,仅在使用时临时依赖旧支付系统对象

2.2.2.结构性设计模式如何处理类/对象间的组合关系?

模式 核心目的 组合关系处理方式 典型应用场景
‌适配器模式‌ 解决接口不兼容问题 ‌对象组合‌:适配器类聚合被适配对象,转换接口逻辑 集成旧系统、第三方库适配
‌桥接模式‌ 分离抽象与实现,支持多维扩展 ‌组合抽象与实现‌:抽象类聚合实现接口,运行时动态绑定(如形状+渲染引擎组合) 跨平台UI开发、多数据库驱动
‌组合模式‌ 统一处理树形结构的部分-整体关系 ‌递归组合‌:容器节点(Composite)聚合子组件(Component),递归调用操作 文件系统、组织架构、GUI组件树
‌装饰器模式‌ 动态添加功能,避免子类爆炸 ‌对象聚合‌:装饰器类聚合原始对象,叠加新行为(如咖啡+牛奶/糖装饰层) 流处理(I/O缓冲)、权限校验链
‌外观模式‌ 简化复杂子系统的调用 ‌聚合子系统对象‌:外观类组合多个子系统接口,提供统一入口 封装SDK、简化API调用
‌享元模式‌ 减少重复对象创建,节省资源 ‌共享对象池‌:享元工厂组合共享对象池,复用相同状态(如棋盘中的棋子实例) 游戏实体管理、文本编辑器字符池
‌代理模式‌ 控制对象访问,增强功能 ‌对象代理‌:代理类聚合真实对象,拦截请求(如延迟加载、权限校验) 远程调用、缓存代理、安全控制

2.3.行为型

优化对象间通信与责任分配

模式 优化重点 典型场景 通信/职责特点
观察者模式 事件通知机制 消息订阅、GUI事件响应 一对多广播式通信
中介者模式 集中协调多对象交互 聊天室、飞机调度系统 多对一中介调度
职责链模式 动态选择处理者 审批流程、异常处理链 请求沿链传递,职责动态分配
策略模式 算法可替换性 支付方式、排序算法切换 行为抽象,运行时注入
状态模式 状态驱动行为变更 订单状态机、游戏角色状态 状态转移触发行为更新
命令模式 请求封装与生命周期管理 操作撤销/重做、任务队列 请求对象化,支持存储与回溯
相关推荐
不伤欣3 小时前
游戏设计模式 - 子类沙箱
游戏·unity·设计模式
漫谈网络3 小时前
MVC与MVP设计模式对比详解
设计模式·mvc
蔡蓝3 小时前
设计模式-观察着模式
java·开发语言·设计模式
哆啦A梦的口袋呀5 小时前
基于Python学习《Head First设计模式》第六章 命令模式
python·学习·设计模式
半路下车7 小时前
【Harmony OS 5】HarmonyOS应用测试指南
设计模式·harmonyos
on the way 1237 小时前
行为型设计模式之Interpreter(解释器)
设计模式
cui_hao_nan7 小时前
设计模式——模板方法
java·设计模式
在未来等你7 小时前
Java并发编程实战 Day 11:并发设计模式
java·设计模式·多线程·并发编程·threadlocal·生产者消费者·读写锁
牛奶咖啡138 小时前
学习设计模式《十二》——命令模式
学习·设计模式·命令模式·队列请求·宏命令·可撤销恢复操作·参数化配置