PHP 设计模式系列

概述及常用设计模式大全

1、设计模式概述 在软件工程中,设计模式(Design Pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在...

创建型

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

1、模式概述 抽象工厂模式为一组相关或相互依赖的对象创建提供接口,而无需指定其具体实现类。抽象工厂的客户端不关心如何创建这些对象,只关心如何将它们组合到一起。 2、问题引出 举个例子,如果...

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

1、模式定义 建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 2、问题引出 假设我们有个生产车的工厂,可以制造各种车,比如自行车、汽车、卡车等等,如...

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

1、模式定义 定义一个创建对象的接口,但是让子类去实例化具体类。工厂方法模式让类的实例化延迟到子类中。 2、问题引出 框架需要为多个应用提供标准化的架构模型,同时也要允许独立应用定义自己的...

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

1、模式定义 多例模式和单例模式类似,但可以返回多个实例。比如我们有多个数据库连接,MySQL、SQLite、Postgres,又或者我们有多个日志记录器,分别用于记录调试信息和错误信息,这些...

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

1、模式定义 对象池(也称为资源池)被用来管理对象缓存。对象池是一组已经初始化过且可以直接使用的对象集合,用户在使用对象时可以从对象池中获取对象,对其进行操作处理,并在不需要时归还给对象池而非...

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

1、模式定义 通过创建原型使用克隆方法实现对象创建而不是使用标准的 new 方式。 2、UML类图 3、示例代码 BookPrototype.php <?php names...

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

1、模式定义 简单说来,单例模式的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个,同时这个类还必须提供一个访问该类的全局访问点。 常见使用实例:数据库连接...

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

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

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

1、模式定义 与简单工厂类似,该模式用于创建一组相关或依赖的对象,不同之处在于静态工厂模式使用一个静态方法来创建所有类型的对象,该静态方法通常是 factory 或  build。 2、UM...

结构型

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

1、模式定义 首先我们来看看什么是适配器。 适配器的存在,就是为了将已存在的东西(接口)转换成适合我们需要、能被我们所利用的东西。在现实生活中,适配器更多的是作为一个中间层来实现这种转换...

PHP 设计模式系列 —— 桥梁模式(Bridge)

1、模式定义 系统设计中,总是充满了各种变数,这是防不慎防的。比如客户代表可能要求修改某个需求,增加某种功能等等。面对这样那样的变动,你只能去不停的修改设计和代码,并且要开始新的一轮测试…… ...

PHP 设计模式系列 —— 组合模式(Composite)

1、模式定义 组合模式(Composite Pattern)有时候又叫做部分-整体模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式使得用户对单个对象和组合对象的使用具有一...

PHP 设计模式系列 —— 数据映射模式(Data Mapper)

1、模式定义 在了解数据映射模式之前,先了解下数据映射,它是在持久化数据存储层(通常是关系型数据库)和驻于内存的数据表现层之间进行双向数据传输的数据访问层。 数据映射模式的目的是让持久化...

PHP 设计模式系列 —— 装饰器模式(Decorator)

1、模式定义 装饰器模式能够从一个对象的外部动态地给对象添加功能。 通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改...

PHP 设计模式系列 —— 依赖注入模式(Dependency Injection)

1、模式定义 依赖注入(Dependency Injection)是控制反转(Inversion of Control)的一种实现方式。 我们先来看看什么是控制反转。 当调用者需要...

PHP 设计模式系列 —— 门面模式(Facade)

1、模式定义 门面模式(Facade)又称外观模式,用于为子系统中的一组接口提供一个一致的界面。门面模式定义了一个高层接口,这个接口使得子系统更加容易使用:引入门面角色之后,用户只需要直接与门...

PHP 设计模式系列 —— 流接口模式(Fluent Interface)

1、模式定义 在软件工程中,流接口(Fluent Interface)是指实现一种面向对象的、能提高代码可读性的 API 的方法,其目的就是可以编写具有自然语言一样可读性的代码,我们对这种代码...

PHP 设计模式系列 —— 代理模式(Proxy)

1、模式定义 代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控...

PHP 设计模式系列 —— 注册模式(Registry)

1、模式定义 注册模式(Registry)也叫做注册树模式,注册器模式。注册模式为应用中经常使用的对象创建一个中央存储器来存放这些对象 —— 通常通过一个只包含静态方法的抽象类来实现(或者通过...

行为型

PHP 设计模式系列 —— 责任链模式(Chain Of Responsibilities)

1、模式定义 责任链模式将处理请求的对象连成一条链,沿着这条链传递该请求,直到有一个对象处理请求为止,这使得多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。 责任链...

PHP 设计模式系列 —— 命令模式(Command)

1、模式定义 命令模式(Command)将请求封装成对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。这么说很抽象,我们举个例子: 假设我们有...

PHP 设计模式系列 —— 迭代器模式(Iterator)

1、模式定义 迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。 当你需要访问一...

PHP 设计模式系列 —— 中介者模式(Mediator)

1、模式定义 中介者模式(Mediator)就是用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 对于中介对...

PHP 设计模式系列 —— 备忘录模式(Memento)

1、模式定义 备忘录模式又叫做快照模式(Snapshot)或 Token 模式,备忘录模式的用意是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在合适的...

PHP 设计模式系列 —— 空对象模式(Null Object)

1、模式定义 空对象模式并不是 GoF 那本《设计模式》中提到的 23 种经典设计模式之一,但却是一个经常出现以致我们不能忽略的模式。该模式有以下优点: 简化客户端代码 减少空指针异常...

PHP 设计模式系列 —— 观察者模式(Observer)

1、模式定义 观察者模式有时也被称作发布/订阅模式,该模式用于为对象实现发布/订阅功能:一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作。 将一个系统分割成一个一...

PHP 设计模式系列 —— 规格模式(Specification)

1、模式定义 规格模式(Specification)可以认为是组合模式的一种扩展。有时项目中某些条件决定了业务逻辑,这些条件就可以抽离出来以某种关系(与、或、非)进行组合,从而灵活地对业务逻辑...

PHP 设计模式系列 —— 状态模式(State)

1、模式定义 状态模式(State)又称状态对象模式,主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。状态模式允许一个对象在其内部状态改变的时候改变其行为,把状态的判断逻辑转移...

PHP 设计模式系列 —— 策略模式( Strategy)

1、模式定义 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Ha...

PHP 设计模式系列 —— 模板方法模式(Template Method)

1、模式定义 模板方法模式又叫模板模式,该模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法...

PHP 设计模式系列 —— 访问者模式(Visitor)

1、模式定义 我们去银行柜台办业务,一般情况下会开几个个人业务柜台的,你去其中任何一个柜台办理都是可以的。我们的访问者模式可以很好付诸在这个场景中:对于银行柜台来说,他们是不用变化的,就是说今...

其它

PHP 设计模式系列 —— 服务定位器模式(Service Locator)

1、模式定义 当系统中的组件需要调用某一服务来完成特定的任务时,通常最简单的做法是使用 new 关键字来创建该服务的实例,或者通过工厂模式来解耦该组件与服务的具体实现部分,以便通过配置信息等更...

PHP 设计模式系列 —— 委托模式( Delegation)

1、模式定义 委托是对一个类的功能进行扩展和复用的方法。它的做法是:写一个附加的类提供附加的功能,并使用原来的类的实例提供原有的功能。 假设我们有一个 TeamLead 类,将其既定任务...

PHP 设计模式系列 —— 资源库模式(Repository)

1、模式定义 Repository 是一个独立的层,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。...

在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离

1、概述 首先需要声明的是设计模式和使用的框架以及语言是无关的,关键是要理解设计模式背后的原则,这样才能不管你用的是什么技术,都能够在实践中实现相应的设计模式。 按照最初提出者的介绍,R...

Laravel 中管道设计模式的使用 —— 中间件实现原理探究

所谓管道(Pipeline)设计模式就是将会数据传递到一个任务序列中,管道扮演者流水线的角色,数据在这里被处理然后传递到下一个步骤。 使用管道使用很多好处的,尤其是在单个任务中编写...

Search Results