# 设计模式演示 ### PHP 示例代码 https://github.com/DesignPatternsPHP/DesignPatternsPHP ### PHP PSR 标准规范:https://learnku.com/docs/psr ### PHP 设计模式全集:https://learnku.com/docs/php-design-patterns/2018 ### PHP 设计模式全集:https://laravelacademy.org/books/php-design-pattern ### PHPunit 文档:https://phpunit.readthedocs.io/zh_CN/latest/assertions.html ### 环境PHP8.1.4 # 学习顺序 ### PHP 学习顺序 https://www.cnblogs.com/guola/archive/2013/01/02/2841997.html | 学习顺序 | 设计模式 | 常用程度 | 适用层次 | 引入时机 | 结构复杂度 | 变化 | 实现 | 体现的原则 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |--------| | 1 | 工厂方法模式(Factory Method) | 很常用 | 代码级 | 编码时 | 简单 | 子类的实例化 | 对象的创建工作延迟到子类 | 开闭原则 | | 2 | 单例模式(Singleton) | 很常用 | 代码级、应用级 | 设计时、编码时 | 简单 | 唯一实例 | 封装对象产生的个数 | | | 3 | 门面模式(Facade) | 很常用 | 应用级、构架级 | 设计时、编码时 | 简单 | 子系统的高层接口 | 封装子系统 | 开闭原则 | | 4 | 模板方法模式(Template Method) | 很常用 | 代码级 | 编码时、重构时 | 简单 | 算法子步骤的变化 | 封装算法结构 | 依赖倒置原则 | | 5 | 抽象工厂模式(Abstract Factory) | 比较常用 | 应用级 | 设计时 | 比较复杂 | 产品家族的扩展 | 封装产品族系列内容的创建 | 开闭原则 | | 6 | 组合模式(Composite) | 比较常用 | 代码级 | 编码时、重构时 | 比较复杂 | 复杂对象接口的统一 | 统一复杂对象的接口 | 里氏代换原则 | | 7 | 代理模式(Proxy) | 比较常用 | 应用级、构架级 | 设计时、编码时 | 简单 | 对象访问的变化 | 封装对象的访问过程 | 里氏代换原则 | | 8 | 命令行模式(Command) | 比较常用 | 应用级 | 设计时、编码时 | 比较简单 | 请求的变化 | 封装行为对对象 | 开闭原则 | | 9 | 观察者模式(Observer) | 比较常用 | 应用级、构架级 | 设计时、编码时 | 比较简单 | 通讯对象的变化 | 封装对象通知 | 开闭原则 | | 10 | 策略模式(Strategy) | 比较常用 | 应用级 | 设计时 | 一般 | 算法的变化 | 封装算法 | 里氏代换原则 | | 11 | 建造者模式(Builder) | 一般 | 代码级 | 编码时 | 一般 | 对象组建的变化 | 封装对象的组建过程 | 开闭原则 | | 12 | 适配器模式(Adapter) | 一般 | 代码级 | 重构时 | 一般 | 对象接口的变化 | 接口的转换 | | | 13 | 桥梁模式(Bridge) | 一般 | 代码级 | 设计时、编码时 | 一般 | 对象的多维度变化 | 分离接口以及实现 | 开闭原则 | | 14 | 装饰模式(Decorator) | 一般 | 代码级 | 重构时 | 比较复杂 | 对象的组合职责 | 在稳定接口上扩展 | 开闭原则 | | 15 | 迭代器模式(Iterator) | 一般 | 代码级、应用级 | 编码时、重构时 | 比较简单 | 对象内部集合的变化 | 封装对象内部集合的使用 | 单一职责原则 | | 16 | 中介者模式(Mediator) | 一般 | 应用级、构架级 | 编码时、重构时 | 一般 | 对象交互的变化 | 封装对象间的交互 | 开闭原则 | | 17 | 备忘录模式(Memento) | 一般 | 代码级 | 编码时 | 比较简单 | 状态的辅助保存 | 封装对象状态的变化 | 接口隔离原则 | | 18 | 状态模式(State) | 一般 | 应用级 | 设计时、编码时 | 一般 | 对象状态的变化 | 封装与状态相关的行为 | 单一职责原则 | | 19 | 访问者模式(Visitor) | 一般 | 应用级 | 设计时 | 比较复杂 | 对象操作变化 | 封装对象操作变化 | 开闭原则 | | 20 | 原型模式(Prototype) | 不太常用 | 应用级 | 编码时、重构时 | 比较简单 | 实例化的类 | 封装对原型的拷贝 | 依赖倒置原则 | | 21 | 享元模式(Flyweight) | 不太常用 | 代码级、应用级 | 设计时 | 一般 | 系统开销的优化 | 封装对象的获取 | | | 22 | 责任链模式(Chain Of Responsibilities) | 不太常用 | 应用级、构架级 | 设计时、编码时 | 比较复杂 | 对象的请求过程 | 封装对象的责任范围 | | | 23 | 解释器模式(Interpreter) | 不太常用 | 应用级 | 设计时 | 比较复杂 | 领域问题的变化 | 封装特定领域的变化 | |