一、面向对象设计原则(OOP Design Principles)
是写出高内聚、低耦合、可维护系统的基础,重点是 SOLID 五大原则 + 其他补充原则。
📌 SOLID 五大设计原则:
原则名称 | 全称 | 核心思想 | 示例关键词 |
---|---|---|---|
S 单一职责原则 | Single Responsibility Principle | 一个类只负责一项职责 | 拆分类、分离逻辑 |
O 开闭原则 | Open-Closed Principle | 对扩展开放,对修改关闭 | 插件式架构 |
L 里氏替换原则 | Liskov Substitution Principle | 子类应能替代父类 | 多态、接口隔离 |
I 接口隔离原则 | Interface Segregation Principle | 客户端不应依赖它不使用的方法 | 多个小接口 |
D 依赖倒置原则 | Dependency Inversion Principle | 高层模块不依赖低层模块,依赖抽象 | 接口注入、构造注入 |
📌 其他常见设计原则:
原则名称 | 核心思想 | 示例 |
---|---|---|
迪米特法则(最少知道原则) | 一个对象应当尽量少了解其他对象的内部细节 | 避免链式调用 $a->b->c() |
组合优于继承 | 多用组合(has-a),少用继承(is-a) | 优先注入依赖而不是继承 |
封装变化 | 把可能变化的部分封装起来 | 策略模式、适配器模式等 |
二、常用设计模式(Design Patterns)
是解决特定软件开发问题的通用方案,
分为三大类:
创建型
结构型
行为型
🔷 1. 创建型模式(解决“如何创建对象”)
模式名称 | 作用 | 示例场景 |
---|---|---|
单例模式 | 保证一个类只有一个实例 | 数据库连接、配置管理 |
工厂模式 | 统一对象创建过程 | 支付网关、消息驱动 |
抽象工厂模式 | 创建一组相关对象 | UI组件、操作系统接口 |
建造者模式 | 按步骤构建复杂对象 | 报表生成器 |
原型模式 | 通过复制已有对象创建新对象 | 复制模板对象 |
🔷 2. 结构型模式(解决“如何组织类与对象”)
模式名称 | 作用 | 示例场景 |
---|---|---|
适配器模式 | 兼容不同接口 | 第三方 SDK 封装 |
装饰器模式 | 动态添加功能 | Laravel 中间件 |
代理模式 | 控制对对象的访问 | 延迟加载、权限控制 |
外观模式 | 提供简化统一接口 | Laravel 门面 |
桥接模式 | 解耦抽象与实现 | 不同平台 UI 样式分离 |
组合模式 | 组织树状结构 | 目录结构、菜单组件 |
享元模式 | 共享对象以节省内存 | 字体、图标缓存 |
🔷 3. 行为型模式(解决“对象如何交互”)
模式名称 | 作用 | 示例场景 |
---|---|---|
观察者模式 | 发布-订阅 | Laravel 事件监听器 |
策略模式 | 可切换算法 | 多种支付/排序/折扣策略 |
模板方法模式 | 固定流程,子类定细节 | 控制器继承基础逻辑 |
责任链模式 | 多个对象依次处理请求 | Laravel 中间件链 |
命令模式 | 封装请求为对象 | 队列任务、撤销操作 |
状态模式 | 封装状态和行为 | 订单状态机 |
备忘录模式 | 保存对象历史状态 | 撤销、版本恢复 |
迭代器模式 | 顺序访问集合元素 | 遍历集合对象 |
解释器模式 | 解析语言语法表达式 | SQL/规则引擎解析器 |
中介者模式 | 降低对象间耦合 | 聊天系统、表单校验中介者 |
三、应用建议
场景 | 建议使用 |
---|---|
业务逻辑解耦 | 观察者、策略、模板方法 |
接入第三方服务 | 适配器、代理、外观 |
增加功能但不改原类 | 装饰器、责任链 |
对象创建复杂 | 建造者、工厂、抽象工厂 |
系统模块间解耦 | 中介者、桥接、外观 |