PHP设计模式-访问者模式

PHP设计模式-访问者模式

前面我们已经讲了22个设计模式。大部分设计模式的原理和实现都很简单,不过也有例外,比如今天要讲的最后一个设计模式--访问者模式。它可以算是 23 种经典设计模式中最难理解的几个之一。因为它难理解、难实现,应用它会导致代码的可读性、可维护性变差,所以,访问者模式在实际的软件开发中很少被用到,在没有特别必要的情况下,建议你不要使用访问者模式。 尽管如此,为了让你以后读到应用了访问者模式的代码的时候,能一眼就能看出代码的设计意图,同时为了整个专栏内容的完整性,我觉得还是有必要给你讲一讲这个模式。除此之外,为了最大化学习效果,我今天不只是单纯地讲解原理和实现,更重要的是,我会手把手带你还原...

PHP 2020-07-25 PM 52℃ 0条
PHP设计模式-中介者模式

PHP设计模式-中介者模式

**中介者模式**的英文翻译是 Mediator Design Pattern。在 GoF 中的《设计模式》一书中,它是这样定义的: > Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects delegate their interaction to a mediator object instead of interacting with each other directly....

PHP 2020-07-23 PM 51℃ 0条
PHP设计模式-解释器模式

PHP设计模式-解释器模式

上篇文章,我们讲了命令模式。命令模式将请求封装成对象,方便作为函数参数传递和赋值给变量。它主要的应用场景是给命令的执行附加功能,换句话说,就是控制命令的执行,比如,排队、异步、延迟执行命令、给命令执行记录日志、撤销重做命令等等。总体上来讲,命令模式的应用范围并不广。 今天,我们来学习解释器模式,它用来描述如何构建一个简单的“语言”解释器。比起命令模式,解释器模式更加小众,只在一些特定的领域会被用到,比如编译器、规则引擎、正则表达式。所以,解释器模式也不是我们学习的重点,你稍微了解一下就可以了。 ### 解释器模式的原理和实现 解释器模式的英文翻译是 Interpreter Des...

PHP 2020-07-20 PM 56℃ 1条
PHP设计模式-命令模式

PHP设计模式-命令模式

命令模式的英文翻译是 Command Design Pattern。在 GoF 的《设计模式》一书中,它是这么定义的: > The command pattern encapsulates a request as an object, thereby letting us parameterize other objects with different requests, queue or log requests, and support undoable operations. 翻译成中文就是下面这样。为了帮助你理解,我对这个翻译稍微做了补充和解释,也一起放在了下面的括号...

PHP 2020-07-19 PM 71℃ 0条
PHP设计模式-备忘录模式

PHP设计模式-备忘录模式

**备忘录(Memento)模式**,也叫快照(Snapshot)模式,英文翻译是 Memento Design Pattern。在 GoF 的《设计模式》一书中,备忘录模式是这么定义的: > Captures and externalizes an object’s internal state so that it can be restored later, all without violating encapsulation. 翻译成中文就是:在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为先前的状态。 我们通过一个...

PHP 2020-07-17 PM 67℃ 0条
PHP设计模式-SPL迭代器

PHP设计模式-SPL迭代器

上篇文章中我们讲了迭代器模式的原理、实现和设计意图。迭代器模式主要作用是解耦容器代码和遍历代码,这也印证了我们前面多次讲过的应用设计模式的主要目的是解耦。 其实在php中,PHP在php5版本后就已经在spl库内置了Iterator接口,以及大量的已经实现的迭代器,如数组,文件等遍历,今天我们就来讲解一些php中的迭代器。在讲解php的迭代器前我们先来了解一下PHP的spl。 ### spl简介 [SPL](https://www.php.net/manual/zh/book.spl.php "SPL") (标准PHP库)是PHP 5面向对象功能中最重要的部分。它在5个关键的方面提...

PHP 2020-07-15 PM 78℃ 0条
PHP设计模式-迭代器模式

PHP设计模式-迭代器模式

上一篇文章中,我们学习了状态模式。状态模式是状态机的一种实现方法。它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。 今天,我们学习另外一种行为型设计模式,迭代器模式。它用来遍历集合对象。不过,很多编程语言都将迭代器作为一个基础的类库,直接提供出来了。在平时开发中,特别是业务开发,我们直接使用即可,很少会自己去实现一个迭代器。不过,知其然知其所以然,弄懂原理能帮助我们更好的使用这些工具类,所以,我觉得还是有必要学习一下这个模式。我们知道,大部分编程语言都提供了多种遍历集合的方式,比如 for 循环、foreach ...

PHP 2020-07-14 PM 80℃ 0条
PHP设计模式-状态模式

PHP设计模式-状态模式

在实际的软件开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。从这一点上来看,它有点像我们之前讲到的组合模式。 状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式有多种,除了状态模式,还有分支逻辑法与查表法。今天,我们就详细讲讲这几种实现方式,并且对比一下它们的优劣和应用场景。 ##什么是有限状态机? 有限状态机,英文翻译是 Finite State Machine,缩写为 FSM,简称为状态机。状态机有 3 个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Tr...

PHP 2020-07-09 PM 85℃ 0条
PHP设计模式-职责链模式

PHP设计模式-职责链模式

职责链模式也叫责任链模式。职责连模式的英文翻译是 Chain Of Responsibility Design Pattern。在 GoF 的《设计模式》中,它是这么定义的: > Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles...

PHP 2020-07-07 PM 86℃ 0条
PHP设计模式-策略模式

PHP设计模式-策略模式

**策略模式**,英文全称是 Strategy Design Pattern。在 GoF 的《设计模式》一书中,它是这样定义的: > Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 翻译成中文就是:定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代...

PHP 2020-07-03 PM 106℃ 0条