Visitor访问者是一种对象行为型设计模式,用于表示一个作用于某对象结构中的各元素的操作,使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。使用Visitor模式, 必须定义两个类层次,一个对应于接受操作的元素,另一个对应于定义对元素的操作的访问者,给访问者类层次增加一个新的子类即可创建一个新的操作。

Visitor访问者模式的结构如下图所示:

上图中,Visitor访问者为该对象结构中ConcreteElement的每一个类声明一个visi操作,该操作的名字和特征标识了发送visit操作给该访问者的那个类,这使得访问者可以确定正被访问元素的具体的类,这样访问者就可以通过该元素的特定的接口直接访问它。ConcreteVisitor具体访问者实现每个visit声明的操作,每个操作实现本算法的一部分,而该算法片段乃是对应于结构中对象的类,ConcreteVisitor为该算法提供了上下文并存储它的局部状态,这一状态常常在遍历该结构的过程中累积结果。Element元素定义一个accept操作,它以一个访问者为参数。ConcreteElement具体元素实现accept操作,该操作以一个访问者为参数。ObjectStructure对象结构能枚举它的元素,可以提供一个高层的接口以允许该访问者访问它的元素,可以是一个复合或是一个集合,如一个列表或一个无序集合。

一个使用Visitor模式的客户必须创建一个ConcreteVisitor对象,然后遍历该对象结构,并用该访问者访问每一个元素。当一个元素被访问时,它调用对应于它的类的visit操作,如果必要,该元素将自身作为这个操作的一个参数以便该访问者访问它的状态。访问者模式使得易于增加新的操作,仅需增加一个新的访问者即可,而增加新的ConcreteElement类却很困难,原因是每添加一个新的ConcreteElement都要在Visitor中添加一个新的抽象操作,并在每一个ConcreteVisitor类中实现相应的操作。

【设计模式】行为模式之Visitor访问者相关推荐

  1. 研磨设计模式 之 访问者模式(Visitor)2——跟着cc学设计系列

    25.2  解决方案 25.2.1  访问者模式来解决 用来解决上述问题的一个合理的解决方案,就是使用访问者模式.那么什么是访问者模式呢? (1)访问者模式定义 (2)应用访问者模式来解决的思路 仔细 ...

  2. C#设计模式之二十一访问者模式(Visitor Pattern)【行为型】

    一.引言 今天我们开始讲"行为型"设计模式的第九个模式,该模式是[访问者模式],英文名称是:Visitor Pattern.如果按老规矩,先从名称上来看看这个模式,我根本不能获得任 ...

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

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

  4. 设计模式学习之访问者模式(Visitor,行为型模式)(21)

    参考:https://www.cnblogs.com/edisonchou/p/7247990.html 在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根 ...

  5. 设计模式--访问者模式(Visitor)

    访问者模式(Visitor) 在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式.例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同 ...

  6. C++设计模式——访问者模式(visitor pattern)

    一.原理讲解 1.1意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 1.2应用场景 一个对象结构包含很多类对象,它们有不同的接口,而你 ...

  7. 设计模式——Visitor(访问者)模式

    目录 前言 1 定义 2 适用性 3 结构 3.1 结构图 3.2 参与者 4 Java实际应用举例--以ASM技术为例 4.1 被访问对象--ClassReader 4.2 Visitor--Cla ...

  8. java的visitor模式_java设计模式(二十一)访问者模式(Visitor)

    介绍 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作.访问者模式是一种对象行为型模式. 简单来 ...

  9. [导入]C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式.zip(10.41 MB)...

    讲座内容: 本培训课程探讨GoF23之 Visitor 访问者模式的意图.动因.原理.应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用. 课程讲师: 李建忠 上海祝成信息科技有限公 ...

最新文章

  1. 【Win10 应用开发】语音命令与App Service集成
  2. SourceForge 停止在被遗弃项目捆绑第三方软件
  3. tensorflow2.0支持的python版本-TensorFlow 版本兼容性
  4. HDU5977-Garden of Eden-树分治+FWT
  5. 345. Reverse Vowels of a String【easy】
  6. Team Fundation Server 2010 三
  7. 网站会员扫码充值系统
  8. MDI窗体容器和权限设置.avi
  9. Python算法教程:找出图的连通分量
  10. 如何生成网站地图(Sitemap)
  11. 测试笔记本续航的软件,续航时间测试和总结
  12. npm publish 报错 403
  13. 请求服务器显示非法请求,请求被服务器识别为非法请求, 但使用 postman/curl 可以正常通过...
  14. 程序员的自我进化:技术的广度与深度怎么权衡
  15. 2799元的魅族旗舰PRO5,虽“不完美”但已尽量追求极致---ESM
  16. 随着国产动漫的崛起,越来越好奇3D动漫的制作过程了
  17. 安装向导无法创建文件夹
  18. OmniPeek tools install and setting
  19. 从 0 到 1 学习 elasticsearch
  20. 《Python从入门到实践》读书笔记——第五章 if语句

热门文章

  1. MySQL插入数据与系统时间相差12小时
  2. Android App优化之Layout怎么摆
  3. JavaSwimg jacob调用模板,斑马打印机打印条码
  4. Python新建一个文件目录,python怎么创建新文件
  5. [CodeChef Trips]Children Trips
  6. invalid button size rid: 5fd188c8-1d752f57-0d53f85f
  7. 编程技巧│这些好用的网站,你千万别错过
  8. Java+spring+springmvc 基于ssm的师生防疫登记备案系统设计#毕业设计
  9. 欢迎访问我的个人网站!
  10. 【GAMES104】 渲染的其他内容