PHP设计模式
本系列博客内容涵盖PHP常用的设计模式,旨在指导读者搭建易扩展的项目框架,高服用的代码,最大程度的发挥面向对象思想的优势。
苍穹0113
奇虎360服务器端资深开发,曾担任中国体育直播TV网站开发组长,网信集团先锋支付架构师,负责系统分布式架构设计,项目框架的搭建以及数据库的优化,企业类库的搭建与维护以及制定技术解决方案。擅长Golang、PHP、面向对象设计模式、Redis、Mysql、微服务等
展开
-
单例
单例模式每一种设计模式都是为了解决特定的问题,单例模式从名字就可以看出,是软件系统中只需要一个对象时使用。如果一个类在系统中只能有一个实例,可以通过如下代码实现<?php/** * Class Singleton * @datetime 2020/7/12 10:08 PM * @author roach * @email jhq0113@163.com */class Singleton{ /** * @var Singleton * @da原创 2020-08-02 17:30:38 · 176 阅读 · 0 评论 -
设计模式
1.什么是模式设计模式是对某些典型易变问题的特定解决方案,这些问题和解决方案经过分类总结,并且为了方便交流给每个解决方案都起了特定的名字。模式是为了解决变化的问题,将变化的问题进行封装,让变化单独变化而互不影响,以达到项目系统的扩展性,模式是一种更高层次的代码复用。设想一下,假如我们的项目是一次性项目,一旦发布,以后再也不会修改,那么我们完全没有必要使用设计模式,反而使用了设计模式会增加系统的复杂度,但是一次性的项目在我们实际工作环境中是极少的,如果实际工作环境中都是一次项目,那个时候我们开原创 2020-08-01 09:55:56 · 408 阅读 · 2 评论 -
PHP设计模式——职责链模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 职责链模式(又叫责任链模式)包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的方法。 UML类图: 角色:原创 2015-06-11 10:41:15 · 5673 阅读 · 4 评论 -
PHP设计模式——访问者模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 UML类图: 角色: 1.抽象访问者(State):为该对象结构中具体元素角色声明一个访问原创 2015-06-11 10:12:07 · 3922 阅读 · 2 评论 -
PHP设计模式——模板模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。 UML类图:原创 2015-06-10 11:25:42 · 3351 阅读 · 0 评论 -
PHP设计模式——状态模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 UML类图: 角色原创 2015-06-10 10:53:27 · 5505 阅读 · 0 评论 -
PHP设计模式——备忘录模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 UML类图: 角色:原创 2015-06-10 10:26:16 · 2529 阅读 · 0 评论 -
PHP设计模式——中介者模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 中介者模式用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。 UML类图: 角色: 中介者接口(UnitedNations):在里原创 2015-06-09 21:40:49 · 3368 阅读 · 0 评论 -
PHP设计模式——迭代器模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 迭代器模式:迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构。 UML类图: 角色: Itera原创 2015-06-08 22:08:41 · 5786 阅读 · 2 评论 -
PHP设计模式——命令模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 命令模式:在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式。原创 2015-06-04 20:54:23 · 2969 阅读 · 0 评论 -
PHP设计模式——观察者模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 观察者模式(有时又被称为发布-订阅模式)。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。 UML类图: 重原创 2015-06-03 22:13:48 · 3972 阅读 · 0 评论 -
PHP设计模式——解释器模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 解释器模式:Given a language, define arepresentation for its grammar along with an interpreter that uses therepresentation to interpret sentences in the language。给定一个语言原创 2015-05-31 21:23:59 · 3046 阅读 · 0 评论 -
PHP设计模式——策略模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化,即封装变化的算法。 适用场景: 1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。原创 2015-05-16 22:15:29 · 8892 阅读 · 1 评论 -
PHP设计模式——代理模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 代理模式为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 UML类图: 角色介绍: 抽象主题角色(IGiveGift):原创 2015-05-16 18:03:12 · 6317 阅读 · 0 评论 -
PHP设计模式——享元模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。 UML类图:原创 2015-05-16 13:06:43 · 2983 阅读 · 1 评论 -
PHP设计模式——门面模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 门面模式(有时候也称外观模式)是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。 案例:炒股票,新股民不了解证券知识做股票,是很容易亏钱的,需要学习的知识太多了,这样新手最好把炒股的事情委托给基金公司,基金原创 2015-05-16 11:27:09 · 7201 阅读 · 0 评论 -
PHP设计模式——装饰器模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 装饰器模式又叫装饰者模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 UML类图: 角色: 组件对象的接口:可以给这些对象动态的添加职责原创 2015-05-03 12:55:40 · 7424 阅读 · 0 评论 -
PHP设计模式——组合器模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 组合模式(有时候又叫做部分-整体模式),将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 实现类原创 2015-05-02 22:03:09 · 2169 阅读 · 0 评论 -
PHP设计模式——桥接模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 桥接模式:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式——将抽象部分与它的实现部分分离,使他们可以独立地变化。 UML类图: 角色介绍: 抽原创 2015-05-02 20:03:18 · 3771 阅读 · 1 评论 -
PHP设计模式——适配器模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的(适配器模式要解决的核心问题)。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 类图: 待适配(ForeignPlayer)角色原创 2015-04-26 13:49:16 · 1970 阅读 · 1 评论 -
PHP设计模式——原型模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化原创 2015-04-25 20:59:30 · 4196 阅读 · 0 评论 -
PHP设计模式——建造者模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。 例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建原创 2015-04-25 11:30:51 · 6200 阅读 · 1 评论 -
PHP设计模式——单例模式
声明:本系列博客参考资料《大话设计模式》,作者程杰。 单例模式也称单态,是23种设计模式中最简单的一种,从他的名字就可以知道他的核心思想,单例模式就是系统中只有一个这样的对象,对象只有一个,在Java或者C#中,单例模式一般有两种,分别是懒汉式、饿汉式,但是在PHP中常用的就是懒汉式,由于PHP是单线程的,懒汉式也不存在双重验证。 懒汉式具体代码:原创 2015-04-21 22:16:55 · 2312 阅读 · 1 评论 -
PHP设计模式——抽象工厂
声明:本系列博客参考资料《大话设计模式》,作者程杰。 前面我们介绍了简单工厂和工厂方法设计模式,今天我们学习最后一个工厂——抽象工厂。 案例:追MM少不了请吃饭了,去麦当劳,只管向服务员说“两个B套餐”就行了。麦当劳就是B套餐的AbstractFactory,B套餐里含有汉堡, 鸡翅和饮料. 麦当劳或肯德基会根据B套餐的规格, 让汉堡Fact原创 2015-04-19 19:05:29 · 2794 阅读 · 0 评论 -
PHP设计模式——工厂方法
声明:本系列博客参考资料《大话设计模式》,作者程杰。 前面我们介绍了简单工厂,今天我们继续学习另外一个工厂——工厂方法。 具体案例:请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我们一般采用FactoryMethod模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员原创 2015-04-16 22:37:35 · 2363 阅读 · 0 评论 -
PHP设计模式——简单工厂
声明:本系列博客参考资料《大话设计模式》,作者程杰。 前面两节内容介绍了什么是设计模式以及六大原则,相信看完前两节内容大家对设计模式已经有了初步的认识,接下来说一下设计模式的分类。 一般将面向对象设计模式分为三类:创建型、结构型、行为型三种。 创建型:创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创原创 2015-04-09 23:01:09 · 2789 阅读 · 0 评论 -
PHP设计模式——六大原则
声明:本系列博客参考资料《大话设计模式》,作者程杰。 一般认为遵从以下六大原则的代码是易扩展可复用的代码: 这六大原则任何面向对象的语言都应该遵守的,要想让你的代码易扩展高服用就尽量去满足这六大原则吧,不一定严格按照某种设计模式,但是如果你的代码符合这六大原原创 2015-04-06 23:18:54 · 7040 阅读 · 0 评论 -
PHP设计模式——概述
声明:本系列博客参考资料《大话设计模式》,作者程杰。 常见的面向对象设计模式大约有23种,但是自从接触PHP后,渐渐发现常见的设计模式好像少了很多,网络上的资料也比较少,身边的PHP同事们有的甚至没有听说过设计模式,这也有可能是PHP的发展所带来的,因为PHP对面向对象支持的比较晚,好多PHP程序员还按照面向过程的思想写代码。于是,我决定把原来用C#写的原创 2015-04-06 22:15:14 · 3144 阅读 · 0 评论