工厂模式
1, 简单工厂模式
目的
简单工厂模式是一个精简版的工厂模式.
它与静态工厂模式最大的区别是它不是『静态』的. 因为非静态, 所以你可以拥有多个不同参数的工厂, 你可以为其创建子类. 甚至可以模拟 (Mock) 他, 这对编写可测试的代码来讲至关重要. 这也是它比静态工厂模式受欢迎的原因!
UML 图
代码
SimpleFactory.PHP
Bicycle.PHP
用法
测试
Tests/SimpleFactoryTest.PHP
2, 静态工厂模式
目的
与抽象工厂模式类似, 此模式用于创建一系列相关或相互依赖的对象. 『静态工厂模式』与『抽象工厂模式』的区别在于, 只使用一个静态方法来创建所有类型对象, 此方法通常被命名为 factory 或 build.
例子
Zend Framework: Zend_Cache_Backend 或 _Frontend 使用工厂方法创建缓存后端或前端
UML 图
代码
StaticFactory.PHP
FormatterInterface.PHP
FormatString.PHP
FormatNumber.PHP
测试
Tests/StaticFactoryTest.PHP
3, 抽象工厂模式
目的
在不指定具体类的情况下创建一系列相关或依赖对象. 通常创建的类都实现相同的接口. 抽象工厂的客户并不关心这些对象是如何创建的, 它只是知道它们是如何一起运行的.
UML 图
代码
Product.PHP
ShippableProduct.PHP
DigitalProduct.PHP
ProductFactory.PHP
Test
Tests/AbstractFactoryTest.PHP
单例模式
单例模式确保某个类只有一个实例, 而且自行实例化并向整个系统提供这个实例.
单例模式是一种常见的设计模式, 在计算机系统中, 线程池, 缓存, 日志对象, 对话框, 打印机, 数据库操作, 显卡的驱动程序常被设计成单例.
单例模式分 3 种: 懒汉式单例, 饿汉式单例, 登记式单例.
单例模式有以下 3 个特点:
1.只能有一个实例.
2.必须自行创建这个实例.
3.必须给其他对象提供这一实例.
那么为什么要使用 PHP 单例模式?
PHP 一个主要应用场合就是应用程序与数据库打交道的场景, 在一个应用中会存在大量的数据库操作, 针对数据库句柄连接数据库的行为, 使用单例模式可以避免大量的 new 操作. 因为每一次 new 操作都会消耗系统和内存的资源.
策略模式
策略模式是对象的行为模式, 用意是对一组算法的封装. 动态的选择需要的算法并使用.
策略模式指的是程序中涉及决策控制的一种模式. 策略模式功能非常强大, 因为这个设计模式本身的核心思想就是面向对象编程的多形性思想.
策略模式的三个角色:
1.抽象策略角色
2.具体策略角色
3.环境角色(对抽象策略角色的引用)
实现步骤:
1.定义抽象角色类(定义好各个实现的共同抽象方法)
2.定义具体策略类(具体实现父类的共同方法)
3.定义环境角色类(私有化申明抽象角色变量, 重载构造方法, 执行抽象方法)
就在编程领域之外, 有许多例子是关于策略模式的. 例如:
如果我需要在早晨从家里出发去上班, 我可以有几个策略考虑: 我可以乘坐地铁, 乘坐公交车, 走路或其它的途径. 每个策略可以得到相同的结果, 但是使用了不同的资源.
策略模式的代码实例:
观察者模式
1: 观察者模式(Observer), 当一个对象状态发生变化时, 依赖它的对象全部会收到通知, 并自动更新.
2: 场景: 一个事件发生后, 要执行一连串更新操作. 传统的编程方式, 就是在事件的代码之后直接加入处理的逻辑. 当更新的逻辑增多之后, 代码会变得难以维护. 这种方式是耦合的, 侵入式的, 增加新的逻辑需要修改事件的主体代码.
3: 观察者模式实现了低耦合, 非侵入式的通知与更新机制. 定义一个事件触发抽象类.
定义一个观察者接口
实现:
注册模式
注册模式, 解决全局共享和交换对象. 已经创建好的对象, 挂在到某个全局可以使用的数组上, 在需要使用的时候, 直接从该数组上获取即可. 将对象注册到全局的树上. 任何地方直接去访问.
适配器模式
将各种截然不同的函数接口封装成统一的 API. PHP 中的数据库操作有 MySQL,MySQLi,PDO 三种, 可以用适配器模式统一成一致, 使不同的数据库操作, 统一成一样的 API. 类似的场景还有 cache 适配器, 可以将 memcache,Redis,file,apc 等不同的缓存函数, 统一成一致. 首先定义一个接口(有几个方法, 以及相应的参数). 然后, 有几种不同的情况, 就写几个类实现该接口. 将完成相似功能的函数, 统一成一致的方法.
MySQL
MySQLi
来源: https://www.cnblogs.com/it-abu/p/13356989.html