PHP 设计模式系列 —— 适配器模式(Adapter / Wrapper)

1、模式定义 首先我们来看看什么是适配器。 适配器的存在,就是为了将已存在的东西(接口)转换成适合我们需要、能被我们所利用的东西。在现实生活中,适配器更多的是作为一个中间层来实现这种转换作用。比如电源适配器,它是用于电流变换(整流)的设备。 适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 2、UML类图 ...

PHP 设计模式系列 —— 静态工厂模式(Static Factory)

1、模式定义 与简单工厂类似,该模式用于创建一组相关或依赖的对象,不同之处在于静态工厂模式使用一个静态方法来创建所有类型的对象,该静态方法通常是 factory 或  build。 2、UML类图 3、示例代码 StaticFactory.php <?php namespace DesignPatterns\Creational\StaticFactory; ...

PHP 设计模式系列 —— 简单工厂模式(Simple Factory)

1、模式定义 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂。 2、UML类图 3、实例代码 ConcreteFactory.php <?php namespace DesignPatterns\Creational\SimpleFactory; ...

PHP 设计模式系列 —— 单例模式(Singleton)

1、模式定义 简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。 常见使用实例:数据库连接器;日志记录器(如果有多种用途使用多例模式);锁定文件。 2、UML类图 3、示例代码 Singleton.php <?php namespace DesignPatter...

PHP 设计模式系列 —— 原型模式(Prototype)

1、模式定义 通过创建原型使用克隆方法实现对象创建而不是使用标准的 new 方式。 2、UML类图 3、示例代码 BookPrototype.php <?php namespace DesignPatterns\Creational\Prototype; /** * BookPrototype类 */ abstract class BookPro...

PHP 设计模式系列 —— 对象池模式(Object Pool)

1、模式定义 对象池(也称为资源池)被用来管理对象缓存。对象池是一组已经初始化过且可以直接使用的对象集合,用户在使用对象时可以从对象池中获取对象,对其进行操作处理,并在不需要时归还给对象池而非销毁它。 若对象初始化、实例化的代价高,且需要经常实例化,但每次实例化的数量较少的情况下,使用对象池可以获得显著的性能提升。常见的使用对象池模式的技术包括线程池、数据库连接池、任务队列池、图...

PHP 设计模式系列 —— 多例模式(Multiton)

1、模式定义 多例模式和单例模式类似,但可以返回多个实例。比如我们有多个数据库连接,MySQL、SQLite、Postgres,又或者我们有多个日志记录器,分别用于记录调试信息和错误信息,这些都可以使用多例模式实现。 2、UML类图 3、示例代码 Multiton.php <?php namespace DesignPatterns\Creational\Mul...

PHP 设计模式系列 —— 工厂方法模式(Factory Method)

1、模式定义 定义一个创建对象的接口,但是让子类去实例化具体类。工厂方法模式让类的实例化延迟到子类中。 2、问题引出 框架需要为多个应用提供标准化的架构模型,同时也要允许独立应用定义自己的域对象并对其进行实例化。 3、解决办法 工厂方法以模板方法的方式创建对象来解决上述问题。父类定义所有标准通用行为,然后将创建细节放到子类中实现并输出给客户端。 人们通常使用工厂模式作为创...

PHP 设计模式系列 —— 建造者模式(Builder)

1、模式定义 建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 2、问题引出 假设我们有个生产车的工厂,可以制造各种车,比如自行车、汽车、卡车等等,如果每辆车都是从头到尾按部就班地造,必然效率低下。 3、解决办法 我们可以试着将车的组装和零部件生产分离开来:让一个类似“导演”的角色负责车子组装,而具体造什么样的车需要什么样的零部件让具体的“...

PHP 设计模式系列 —— 抽象工厂模式(Abstract Factory)

1、模式概述 抽象工厂模式为一组相关或相互依赖的对象创建提供接口,而无需指定其具体实现类。抽象工厂的客户端不关心如何创建这些对象,只关心如何将它们组合到一起。 2、问题引出 举个例子,如果某个应用是可移植的,那么它需要封装平台依赖,这些平台可能包括窗口系统、操作系统、数据库等等。这种封装如果未经设计,通常代码会包含多个 if 条件语句以及对应平台的操作。这种硬编码不仅可读性差,而且...