首页
学习
活动
专区
圈层
工具
发布

php设计模式

设计模式是熟练运用OOP后自然而然形成的代码习惯。达到最高境后只有一句话:高内聚、低耦合。 php中的设计模式 想要成为一名高级程序员,设计模式是必须完全掌握的。...我们经常看到关于java,c#设计模式的讲解,却很少看到用php代码讲解设计模式的, 这是为什么呢。...php本身是一种面向过程编程的的语言,PHP 5中借鉴了java的一些特性开始对面向对象支持更加完善,设计模式也可以用与php中了,但是现在关于php面向对象编程的资料很少,对很多phper进阶高级程序员造成很大障碍...,所以我打算写一系列设计模式的文章,一来是对自己的一种提高,二来希望能帮助到那些像我一样没有其他语言基础,php作为的入门语言的程序员。...本篇将结合代码介绍最基础的三种,工厂模式、单例模式和注册树模式。 学习设计模式之前希望大家能已经熟练掌握了php的一些高级特性,比如命名空间,链式调用,类的自动载入。

1.5K90

PHP设计模式——状态模式

John在一家受欢迎的电话支持公司中担任客户支持代表。在以客户服务为导向的公司中,公司的首要任务是确保客户满意。为了改善服务质量,该公司投入了大量资金来改善支持代表的服务。...最近的研究表明,支持代表的情绪会影响他们在工作中的表现。John本人承认,接听电话时的前几句话通常可以表明他所处的心情。当他心情愉快时,通常会向顾客打招呼“嗨!”或“你好,怎么样”。我可以帮您吗?”...但是,随着研究的进展和更多信息的引入,该代码可能还不够。研究表明,一个人的情绪会根据他打过的电话的数量以及当前的情绪而改变。...当基于情绪的条件适用于其他岗位的各个方面时,会发生什么? 是时候改变了。在这种情况下,我们就需要使用状态模式(State Pattern)。状态模式使我们可以封装变化的部分,即sayHi函数。...在我们的示例中,状态模式允许对象(SupportRep对象)在其内部状态更改(在HappyState,ModerateState和AngryState之间切换)时更改其行为(各个状态类中的sayHi()

63710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP设计模式——复合模式

    她是这项工作的新手,她意识到这项工作比她想象的要难,她不得不想出一种准确记录箱子的方法。...Agnes需要更好的解决方案,一个易于维护的可持续解决方案。 这就是复合模式(Composite Pattern)适合应用的时候。在我们的案例中,对象是一个整体层次结构。盒子可能包含盒子或产品。...我们可以使InventoryClerk类使用复合模式(Composite Pattern)统一处理Product对象和Box对象。 在复合模式中。...recordProducts(ProductComponent $productComponent) { $productComponent->getName(); } } 现在,我们已经将复合模式...,“复合模式(Composite Pattern)”使我们能够将对象(产品Product对象和Box对象)组合为树形结构,以表示部分整体层次结构。

    87100

    PHP设计模式——策略模式

    策略使算法独立于使用该算法的客户端而变化。 通勤是我们日常生活的一部分。每天,当我们离开家上班时,我们必须选择交通工具。...作为通勤者,我们有很多选择,出租车,公共汽车或火车,这实际上取决于我们的心情和我们所处的状况。就像你出门时间来得很晚而赶时间一样,那么你可能会乘出租车 。...在另外的某天,如果你有充足的时间并不在有没有座位,那么乘公共汽车是一个不错的选择。在我们想要确保我们准时到达某个位置而又不会遇到交通拥堵的麻烦的日子里,我们会坐火车。 这是一个策略模式的完美示例。...它们在成本上彼此不同,并且它们采用不同的路线将您带到目的地。它们是相同的,因为尽管旅行时间长短不一,但它们都是到达目的地的一种方式。他们都属于一个范畴,即运输。...在我们的示例中,通过应用策略模式,我们定义了算法(公交车,火车和出租车)的范畴(运输范畴),封装了每个算法(Passenger乘客类仅知道运输(Transportation)接口),并使它们可互换(它们实现了通用接口

    81020

    PHP设计模式——迭代模式

    提供一种在不暴露对象内部逻辑的情况下顺序访问聚合对象的元素的方法。 作为商店经理,Eric的工作包括检修各个部门的产品。商店中实际上有两个部门。...这是因为类(class)只有一个改变的理由。这里的checkIn()方法在很大程度上取决于两个部门使用的数据结构。至少有两个原因需要更改。...如果我们可以隐藏部门使用的存储产品的数据结构,并提供一个迭代产品的通用方法,该会怎样?这时就是我们需要迭代器模式(Iterator Pattern)的时候。 让我们重新调整代码。...该方法的作用是实例化先前设计的具体迭代器。...在我们的示例中,迭代器模式提供了一种顺序访问聚合对象(MenDepartment和WomenDepartment对象)的元素(产品)的方法,而无需暴露其内部逻辑表现形式(Array或SqlStack)。

    88930

    【php设计模式】模板模式

    定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。...通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。...每个步骤的具体实现,由子类完成。 以设计游戏为例,我们先定义游戏的大概框架,然后使各个不同的游戏来继承这个游戏框架,并实现框架中具体的方法 php abstract class Game{ abstract function initialize(); abstract function startPlay(); abstract

    3K40

    PHP设计模式——门面模式

    为子系统中的一组接口提供统一的接口。Facade(门面)定义了一个更高级别的界面,使子系统更易于使用。 作为一名软件开发人员,我们所有人要做的一个主要任务就是部署。...他使用一种非常标准的方法来做到这一点:将服务器设置为脱机模式,传输源代码文件,更新数据库的架构以及将服务器设置为联机: $server->offline(); $fileSystem->transferFiles...在这种情况下,我们可以使用门面模式(Facade Pattern)。...这是门面模式(Facade Pattern)的一个示例。...在我们的示例中,通过使用门面模式(Facade Pattern),它为子系统中的一组接口(服务器,文件系统和数据库)提供了统一的接口(DeployFacade)。

    68620

    【php设计模式】代理模式

    代理模式就是实现一个类代表另一个类的功能的一种结构性设计模式。 主要解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。...在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层...下面实现一个图片处理类,但是在使用的时候不直接调用这个实际的类,而是通过代理类的方式去使用。 filename); } $this->realImage->display(); } } $proy_image = new ProyImage("php.jpg..."); $proy_image->display(); $proy_image->display(); //输出: //加载图片:php.jpg //显示图片:php.jpg //显示图片:php.jpg

    54710

    PHP设计模式之组合模式

    PHP设计模式之组合模式 互联网公司流行扁平化管理,也就是管理层级尽量少于或者不超过三层,作为一个底层的码农,你的CEO和你的职级也就相差3层以内。...但是很多传统企业,则会有非常深的层级关系,从数据结构看,这种按职能进行分组的组织架构非常像一颗树。而我们今天介绍的组合模式的作用就和这个企业组织架构层级的模式非常类似。...PHP_EOL; } } 叶子节点,没有子节点的最终节点。...,也就用不着为定义组合而写一些选择判断语句了 组合模式可以让客户一致性地使用组合结构和单个对象 接着文章最开头的例子来说,在我们的组织架构中,一项任务下达到最底的人员时,会经历多个层级。...当一个通知下发时,每一层级的工作人员都要做出回应,并将通知继续下发到下属员工那里,同时从下属哪里获得反馈。这样,我们就不知不觉地在实践中完成了一次组合模式的应用。

    80410

    【php设计模式】装饰器模式

    装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ? Component为统一接口,也是装饰类和被装饰类的基本类型。...ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。...而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用于装饰的子类了。而其子类才是赋有具体装饰效果的装饰产品类。...php /** *装饰器模式 **/ interface Component{ public function operation(); } class ConcreteComponent...:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。在不想增加很多子类的情况下扩展类可以使用这种设计模式

    43130

    【php设计模式】建造者模式

    php /** *建造者模式特点: * 1.客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。...* 2.每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, *用户使用不同的具体建造者即可得到不同的产品对象 * 3.建造者模式所创建的产品一般具有较多的共同点...,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式 * *角色: * Product(产品角色):一个具体的产品对象。...* Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。...* *示例: * 通过建造者模式来创建不同配置的手机,用户购买手机时不需要知道手机是怎么生产出来的只要说自己要低配手机(低配建造者)还是高配手机(高配建造者)然后手机商(指挥者)去获取 * */

    35020

    浅谈PHP中的设计模式

    个人感觉所谓 php 设计模式,就像 36 计一样,不是你天天读 36 计,就可以自诩自己的 36 计很牛逼,同样你不知道 36 计,你一样可以会用 36 计而已,何故面试官以 PHP 设计模式来取人?...,在 PHP 中将继承 Iterator 类 (9)原型模式:实现了一个原型接口,该接口用于创建当前对象的克隆。...例如,一个对象需要在一个高代价的数据库操作之后被创建 如果只是使用了 PHP 的继承功能,你设计出来的软件并不是面向对象的设计,因为这并不能提高代码的重用性和灵活性。...所以,在学面向对象设计的时候,特别是如 PHP、java、python 这些语言,设计模式是必须要懂的,不然设计的一堆东西和以前过程式编程差别不大。 沈唁志|一个PHPer的成长之路!...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:浅谈PHP中的设计模式

    77430

    【php设计模式】享元模式

    享元模式其实就是共享独享模式,减少重复实例化对象的操作,从而将实例化对象造成的内存开销降到最低。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。...我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。 php interface Shape{ public function draw(); } class Circle implements Shape{ private $color...Green circle 16 this is a Blue circle 17 this is a White circle 18 this is a Black circle 19 注意:享元模式适用于对象存在时间不长的情况...假设我们是在一个创建游戏人物的场景中使用,当创建了某个类型的英雄人物对象之后,我们想要再创建一个相同类型不同属性的英雄人物时,则不适合使用这种设计模式,因为后来的英雄人物对象会是前一个对象改变属性后生成的

    48820

    PHP设计模式——装饰器模式

    装饰器为子类扩展功能提供了非常灵活的替代方案。 咖啡深受人们的喜爱。咖啡的香气、味道和能力增强足以开启人们美好的一天。这就难怪为什么星巴克和咖啡豆这样的咖啡店在生意上可以做得这么好。...这时装饰者模式就是派上用场的时候。我们将创建装饰器类,向咖啡对象添加调味品。...coffeeWithMilkAndSugar = new WithSugarDecorator($coffeeWithMilk); echo $coffeeWithMilkAndSugar->getName(); 显然,通过使用装饰器模式...而且,装饰器模式(Decorator Pattern)在运行时向包装类添加了附加功能,因此与通过子类进行继承相比,添加/删除功能很灵活。...在我们的示例中,装饰器模式(Decorator Pattern)将附加职责(牛奶调味品,糖调味品和奶油调味品)动态地附加到对象(咖啡对象)上。装饰器为子类提供了灵活的替代方案,以扩展功能。

    55500
    领券