访问者模式实际上是让外部类能够获取树形结构的每个节点的对象,对每个对象进行操作的模式,它让我们在不改动原有树形结构的基础上扩展功能,比如统计等等。

在这种模式下,必须有的几个要素:

1、具体的元素对象,访问者实际要访问的位置(即节点)

2、稳定的树形结构,每个节点都是一个元素对象,一般在组合模式下比较多,它提供给了让访问者能够进行访问的实际位置(即访问者访问的是具体的属性结构的某个节点的实例化对象);

3、访问者接口,这里定义了访问者的接口方法,这是个在每个节点都会用到的方法;用以节点处引用访问者,从而使得访问者能够访问当前节点。

4、访问者的具体实现,继承了访问者接口,以实现接口方法

//定义元素接口
abstract class User
{public function getPoint(){return rand();//改数据应该由数据库中读取,这里就直接模拟某个值了、}//这里的accept方法用于把访问者引入,在这个方法里,$visitor访问者可以通过User类获取需要的数据进而进行相应的操作。abstract function accept(UserVisitor $visitor);
}//定义元素接口
class VipUser extends User
{//在这里getPoint()具体实现就由接口中实现了//在这里就把当前对象传递给了visitor访问者,在访问者类的visitVip方法中就能根据$this获取必要的数据进行相应的操作public function accept(UserVisitor $vitor){$vitor->visitVip($this);   }
}
class NormalUser extends User
{//同上的getPoint()具体实现就由接口中实现了//同VipUser类中的acceptpublic function accept(UserVisitor $vitor){$vitor->visitNormal($this);}
}//定义访问者接口
abstract class UserVisitor
{//访问者必须要实现的访问不同用户的接口方法abstract function visitVip(User $user);abstract function visitNormal(User $user);
}//积分操作的访问者实现
class PointActVisitor extends UserVisitor
{public function visitVip(User $user){echo 'Vip用户+10分<br/>';}public function visitNormal(User $user){echo 'Normal用户+5分<br/>';}
}//用户树形结构
class Users
{protected $users;public function addUser(User $user){$this->users[] = $user;}
}

PHP设计模式之访问者模式相关推荐

  1. Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)

    Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...

  2. 北风设计模式课程---访问者模式(Visitor)

    北风设计模式课程---访问者模式(Visitor) 一.总结 一句话总结: 设计模式是日常问题的经验总结方案,所以学好设计模式对日常出现的问题可以有很好的解决. 访问者设计模式有点神似 抽象工厂模式, ...

  3. 设计模式之访问者模式(Visitor)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  4. 设计模式复习-访问者模式

    VisitorMode.h#pragma once #include<list> #include<string> #include<iostream> using ...

  5. 【设计模式】访问者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 一.访问者模式简介 二.访问者模式 适用场景 三.访问者模式 优缺点 四.访问者模式 与 迭代器模式 五.代码示例 1.Game 父类 ( 被访问者 ) 2.VipGame 收费游戏 ( 被 ...

  6. C++设计模式之访问者模式

    访问者模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对访问者模式是这样说的:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的 ...

  7. 设计模式:访问者模式(Vistor)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  8. java的string访问某个元素_C#深究.net常用的23种设计模式之访问者模式(Vistor Pattern)...

    一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...

  9. Android设计模式之——访问者模式

    一.介绍 访问者模式是一种将数据操作与数据结构分离的设计模式,它是<设计模式>中23种设计模式中最复杂的一个,但它的使用频率并不高,正如<设计模式>的作者GOF对访问者模式的描 ...

  10. 设计模式(17) 访问者模式(VISITOR) C++实现

    意图: 表示一个作用于某对象结构的各元素的操作.它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作. 动机: 之前在学校的最后一个小项目就是做一个编译器,当时使用的就是访问者模式. 在静态 ...

最新文章

  1. 一文读懂傅立叶变换处理图像的原理
  2. iOS开发——UI基础-UIImage,UIImageView的使用
  3. 人工智能终于能像人类一样学习,并通过了图灵测试
  4. 【Linux】【服务器】 CentOS7下安装JDK详细过程步骤
  5. 强化学习6——Value-based RL和Policy-based RL 的区别
  6. spring boot + vue + element-ui全栈开发入门——项目部署
  7. 『设计模式』就因为多收了我2块5,我追着收银员问是不是不懂设计模式--策略模式
  8. java多线程做一件事_关于Java的十件事
  9. 微软发布Enterprise Library 4.1和Unity 1.2
  10. (10)System Verilog 虚方法
  11. Android系统开发(3)---如何分析ANR Log的总结
  12. 服务器ip算是虚拟资产吗,云服务器算资产吗
  13. 从现在开始,争取记录每天所学到的、所感受到的、所遇见到的点点滴滴!
  14. http://code.svnspot.com/ 免费代码托管
  15. ABAP术语-Business Components
  16. Mac JDK下载与安装
  17. 用计算机运算符编写检索式,检索式
  18. Base32编码转换
  19. python数据分组聚合案例_《利用Python进行数据分析》十章·数据聚合与分组运算·学习笔记(二)...
  20. 论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement

热门文章

  1. R语言split函数、unsplit函数按组拆分数据、合并数据实战
  2. R语言pmax函数和pmin函数按位计算向量最大值、最小值实战
  3. conda创建子环境并注册kernel
  4. MCMC+马尔科夫链蒙特卡罗
  5. .fa .fna和.fasta是同一种格式文件吗?
  6. 3Blue1Brown深度学习笔记 深度学习之神经网络的结构 Part 1 ver 2.0
  7. 用Eclipse 开发Dynamic Web Project应用程序
  8. 计算机导航辅助教程,计算机导航辅助下微创人工全膝关节置换的初步经验
  9. java8 流操作_java8中的流操作
  10. python用merge匹配和左连接_左手用R右手Python系列——数据合并与追加