返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP中怎么实现访问者模式
  • 453
分享到

PHP中怎么实现访问者模式

2023-06-20 19:06:49 453人浏览 泡泡鱼
摘要

PHP中怎么实现访问者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Gof类图及解释GoF定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提

PHP中怎么实现访问者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Gof类图及解释

GoF定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作

GoF类图

PHP中怎么实现访问者模式

代码实现

interface Visitor{    public function VisitConcreteElementA(ConcreteElementA $a);    function VisitConcreteElementB(ConcreteElementB $b);}class ConcreteVisitor1 implements Visitor{    public function VisitConcreteElementA(ConcreteElementA $a)    {        echo get_class($a) . "被" . get_class($this) . "访问", php_EOL;    }    public function VisitConcreteElementB(ConcreteElementB $b)    {        echo get_class($b) . "被" . get_class($this) . "访问", PHP_EOL;    }}class ConcreteVisitor2 implements Visitor{    public function VisitConcreteElementA(ConcreteElementA $a)    {        echo get_class($a) . "被" . get_class($this) . "访问", PHP_EOL;    }    public function VisitConcreteElementB(ConcreteElementB $b)    {        echo get_class($b) . "被" . get_class($this) . "访问", PHP_EOL;    }}

抽象的访问者接口及两个具体实现。可以看作是一家小两口来我们家作客咯!

interface Element{    public function Accept(Visitor $v);}class ConcreteElementA implements Element{    public function Accept(Visitor $v)    {        $v->VisitConcreteElementA($this);    }    public function OperationA()    {    }}class ConcreteElementB implements Element{    public function Accept(Visitor $v)    {        $v->VisitConcreteElementB($this);    }    public function OperationB()    {    }}

元素抽象及实现,也可以看作是要访问的实体。当然就是我和我媳妇啦。

class ObjectStructure{    private $elements = [];    public function Attach(Element $element)    {        $this->elements[] = $element;    }    public function Detach(Element $element)    {        $position = 0;        foreach ($this->elements as $e) {            if ($e == $element) {                unset($this->elements[$position]);                break;            }            $position++;        }    }    public function Accept(Visitor $visitor)    {        foreach ($this->elements as $e) {            $e->Accept($visitor);        }    }}

这是一个对象结构,用于保存元素实体并进行访问调用。大家在客厅里见面,互相寒暄嘛,这里就是个客厅

$o = new ObjectStructure();$o->Attach(new ConcreteElementA());$o->Attach(new ConcreteElementB());$v1 = new ConcreteVisitor1();$v2 = new ConcreteVisitor2();$o->Accept($v1);$o->Accept($v2);

客户端的调用,总算让大家正式见面了,互相介绍握手。一次访问就愉快的完成了。

  • 让访问者调用指定的元素。这里需要注意的,访问者调用元素的行为一般是固定的,很少会改变的。也就是VisitConcreteElementA()、VisitConcreteElementB()这两个方法。也就是定义对象结构的类很少改变,但经常需要在此结构上定义新的操作时,会使用访问者模式

  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类时,适用于访问者模式

  • 访问者模式适合数据结构不变化的情况。所以,它是一种平常你用不上,但一旦需要的时候就只能用这种模式的模式。GoF:“大多时候你并不需要访问者模式,但当一旦你需要访问者模式时,那就是真的需要它了”。因为很少有数据结构不发生变化的情况

  • 访问者模式的一些优缺点:易于增加新的操作;集中相关的操作而分离无关的操作;增加新的ConcreteElement类很困难;通过类层次进行访问;累积状态;破坏封装

我们公司的账务,只有收入和支出两项(Element),但是不同的部门(Visitor)访问的时候会给出不同的内容。比如我查看的时候只需要查看每月或每季度的汇总数据即可,财务总监则需要详细的收支记录,而会计在做账时更是需要完整的明细。可见,公司的运营还真的是需要非常广泛的知识的,不仅是管理能力,账务知识也是必要了解的内容!!

完整代码:https://GitHub.com/zhangyue0503/designpatterns-php/blob/master/23.visitor/source/visitor.php

实例

最后一个模式的例子还是回到我们的信息发送上来。同样的还是多个服务商,它们作为访问者需要去使用各自的短信发送及APP推送接口。这时,就可以使用访问者模式来进行操作,实现这些访问者的全部操作。

访问者模式信息发送

PHP中怎么实现访问者模式

完整源码Https://github.com/zhangyue0503/designpatterns-php/blob/master/23.visitor/source/visitor-msg.php

<?phpinterface ServiceVisitor{    public function SendMsg(SendMessage $s);    function PushMsg(PushMessage $p);}class AliYun implements ServiceVisitor{    public function SendMsg(SendMessage $s)    {        echo '阿里云发送短信!', PHP_EOL;    }    public function PushMsg(PushMessage $p)    {        echo '阿里云推送信息!', PHP_EOL;    }}class JiGuang implements ServiceVisitor{    public function SendMsg(SendMessage $s)    {        echo '极光发送短信!', PHP_EOL;    }    public function PushMsg(PushMessage $p)    {        echo '极光推送短信!', PHP_EOL;    }}interface Message{    public function Msg(ServiceVisitor $v);}class PushMessage implements Message{    public function Msg(ServiceVisitor $v)    {        echo '推送脚本启动:';        $v->PushMsg($this);    }}class SendMessage implements Message{    public function Msg(ServiceVisitor $v)    {        echo '短信脚本启动:';        $v->SendMsg($this);    }}class ObjectStructure{    private $elements = [];    public function Attach(Message $element)    {        $this->elements[] = $element;    }    public function Detach(Message $element)    {        $position = 0;        foreach ($this->elements as $e) {            if ($e == $element) {                unset($this->elements[$position]);                break;            }            $position++;        }    }    public function Accept(ServiceVisitor $visitor)    {        foreach ($this->elements as $e) {            $e->Msg($visitor);        }    }}$o = new ObjectStructure();$o->Attach(new PushMessage());$o->Attach(new SendMessage());$v1 = new AliYun();$v2 = new JiGuang();$o->Accept($v1);$o->Accept($v2);

看完上述内容,你们掌握PHP中怎么实现访问者模式的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网PHP编程频道,感谢各位的阅读!

--结束END--

本文标题: PHP中怎么实现访问者模式

本文链接: https://lsjlt.com/news/299617.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP中怎么实现访问者模式
    PHP中怎么实现访问者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Gof类图及解释GoF定义:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提...
    99+
    2023-06-20
  • 怎么中JAVA项目中实现一个访问者模式
    这篇文章将为大家详细讲解有关怎么中JAVA项目中实现一个访问者模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。访问者模式:一个作用于某对象结构中各元素的操作,使你可以在不改变各元素类数据结...
    99+
    2023-05-31
    java ava 访问者模式
  • Python实现访问者模式详情
    假设要实现一个存放多种类型数据结构的对象,比如一个存放算术操作数和操作符的树结点,需要存放包含一元操作符、二元操作符和数字类型的结点 class Node:     pass c...
    99+
    2024-04-02
  • PHP入门指南:访问者模式
    PHP作为一种流行的服务器端脚本语言,它的应用范围非常广泛。无论是搭建网站,还是开发Web应用,PHP都是一种非常常见的选择。本文将介绍PHP的访问者模式,这是一种非常有用的设计模式,可用于处理复杂的对象结构。什么是访问者模式?访问者模式是...
    99+
    2023-05-23
    PHP 入门 访问者模式
  • 什么是访问者模式
    这篇文章主要介绍“什么是访问者模式”,在日常操作中,相信很多人在什么是访问者模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是访问者模式”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • PHP设计模式之中介者模式怎么实现
    这篇“PHP设计模式之中介者模式怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP设计模式之中介者模式怎么实现”文...
    99+
    2023-07-05
  • C++实现访问者模式的基础介绍
    目录一、访问者模式基础知识1.1 模式动机1.2 访问者模式结构1.3 访问者模式优缺点1.4 访问者模式应用一、访问者模式基础知识 1.1 模式动机     &...
    99+
    2024-04-02
  • 怎么深入理解Java设计模式中的访问者模式
    怎么深入理解Java设计模式中的访问者模式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、什么是访问者模式定义:表示一个作用于其对象结构中的各元素的操作,它使你可以在不改变各...
    99+
    2023-06-25
  • Java设计模式之访问者模式
    大多数情况下你不需要访问者模式,但当一旦需要访问者模式时,那就是真的需要它了,这是设计模式创始人的原话。可以看出应用场景比较少,但需要它的时候是不可或缺的,这篇文章就开始学习最后一个...
    99+
    2022-11-13
    Java 设计模式 访问者模式
  • PHP设计模式之观察者模式怎么实现
    这篇文章主要介绍“PHP设计模式之观察者模式怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP设计模式之观察者模式怎么实现”文章能帮助大家解决问题。PHP观察者模式(Observer Pa...
    99+
    2023-07-05
  • Python 设计模式行为型访问者模式
    目录一、访问者模式(Visitor Pattern)二、应用场景三、代码示例一、访问者模式(Visitor Pattern) 数据结构中保存着许多元素,当我们希望改变一种对元素的处理...
    99+
    2024-04-02
  • vue中怎么实现观察者模式
    vue中怎么实现观察者模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 响应式原理让我们先从相应式原理开始。我们可以通过O...
    99+
    2024-04-02
  • Java中怎么实现创建者模式
    这篇文章给大家介绍Java中怎么实现创建者模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。创建者模式和工厂模式有点类似,不过关注点不同。工厂模式往往只关心你要的是什么,二不关心这个东西的具体细节是什么。而创建模式则关...
    99+
    2023-06-17
  • Java设计模式之java访问者模式详解
    目录介绍定义及使用场景UML类图角色财务案例个人心得体会静态分派以及动态分派静态分派动态分派访问者模式中的伪动态双分派 对访问者模式的一些思考总结优点缺点适用性参考文章总结介绍 ...
    99+
    2024-04-02
  • javascript设计模式中的订阅者模式怎么实现
    本篇内容介绍了“javascript设计模式中的订阅者模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. 初识代理模式代理模式是...
    99+
    2023-06-26
  • JavaScript设计模式中的观察者模式怎么实现
    本文小编为大家详细介绍“JavaScript设计模式中的观察者模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript设计模式中的观察者模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-02
  • Java访问者模式实现优雅的对象结构处理
    目录介绍实现总结优点缺点应用场景介绍 Java访问者模式(Visitor Pattern)是一种行为型设计模式,它允许将算法与其所操作的对象分离.该模式定义了一个访问者对象,它可以访...
    99+
    2023-05-17
    Java访问者模式 Java访问者模式实现方式
  • 举例讲解Python设计模式编程中的访问者与观察者模式
    访问者模式 我觉得Visitor模式是在补修改已有程序结构前提下,通过添加额外的访问者完成对代码功能的拓展 为什么这样用?当你的类层次较多,在某层结构中增加新的方法,要是在基类上面添加或者变更,可能破坏原来...
    99+
    2022-06-04
    模式 观察者 访问者
  • 轻松掌握python设计模式之访问者模式
    本文实例为大家分享了python访问者模式代码,供大家参考,具体内容如下 """访问者模式""" class Node(object): pass class A(Node): pass c...
    99+
    2022-06-04
    模式 访问者 轻松
  • .Net行为型设计模式之访问者模式(Visitor)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、访问者模式的代码实现六、访问者模式的实现要点:(1)、访问者模式的主要优点有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作