访问者模式

引子

对于系统中一个已经完成的类层次结构,我们已经给它提供了满足需求的接口。但是面对新增加的需求,我们应该怎么做呢?如果这是为数不多的几次变动,而且你不用为了一个需求的调整而将整个类层次结构统统地修改一遍,那么直接在原有类层次结构上修改也许是个不错的主意。

但是往往我们遇到的却是:这样的需求变动也许会不停的发生;更重要的是需求的任何变动可能都要让你将整个类层次结构修改个底朝天…。这种类似的操作分布在不同的类里面,不是一个好现象,我们要对这个结构重构一下了。

那么,访问者模式也许是你很好的选择。

定义与结构

访问者模式,顾名思义使用了这个模式后就可以在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升。

《设计模式》一书对于访问者模式给出的定义为:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必须条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于 java 中的 collection 概念了。

以下是访问者模式的组成结构:

  1. 访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特定接口直接访问它。

  2. 具体访问者角色(Concrete Visitor):实现每个由访问者角色(Visitor)声明的操作。

  3. 元素角色(Element):定义一个 Accept 操作,它以一个访问者为参数。

  4. **具体元素角色(Concrete Element)

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

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

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

    2. JAVA设计模式之访问者模式

      转自: http://www.kongzid.com/archives/design20 ,更好阅读体验:http://www.kongzid.com 访问者模式(Visitor)的定义 表示一个作用 ...

    3. java设计模式-18访问者模式

      定义 封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. 在被访问的类里面加一个对外提供接待访问者的接口 需要对一个对象结构中的对象进行很多不同操作 ...

    4. Java设计模式:访问者模式,同一数据对象,不同访问者索取目的不同

      /*** 员工接受不同部门的数据访问. * 但是不同部门访问该名员工获取的数据不相同.* * @author zhangfly** @param <T>*/ public abstract ...

    5. 由电脑专卖系统引发的Java设计模式:访问者模式

      访问者模式 定义 意图 解决问题 何时使用 优缺点 结构 电脑专卖系统 定义 访问者模式是对象的行为型模式,它的目的是封装一些施加于某些数据结构元素之上的操作,一旦这些操作需要修改的话,接收这个操作的 ...

    6. Java设计模式作业-访问者模式

      某软件公司需要设计一个源代码解析工具,该工具可以对源代码进行解析和处理,在该工具的初始版本中,主要提供了以下 3 个功能.所有代码和接口均在一个package内. 目录 作业内容 一.UML图 二.代 ...

    7. Java设计模式分为创建模式, 结构模式, 行为模式 3种类型

      Java设计模式之创建模式包括: Factory,    工厂模式 Singleton,   单例模式 Builder,    建造模式 Prototype,    原型模式 Java设计模式之结构模 ...

    8. java备忘录模式应用场景_图解Java设计模式之备忘录模式

      图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

    9. Java设计模式之策略模式与状态模式

      一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

    10. Java设计模式(建造者模式-适配器模式-桥接模式)

      Java设计模式Ⅲ 1.建造者模式 1.1 建造者模式概述 1.2 建造者模式的注意事项和细节 1.3 代码理解 2.适配器模式 2.1 类适配器模式 2.1.1 代码理解 2.2 对象适配器模式 2 ...

    最新文章

    1. 百度李彦宏:人工智能是万物命脉
    2. 小五:从个人用户无法注册.CN域名说起
    3. 子查询中的空值导致的问题。
    4. GDCM:扫描包含DICOM文件的目录的测试程序
    5. python和C语言分别实现插入排序
    6. [Jmeter]Jmeter环境搭建
    7. mysql float 误差_mysql下float类型使用一些误差详解
    8. QQ输入法新功能设计文档
    9. VS2012+ArcGIS Engine10.2安装教程
    10. 说一说android:persistent=true保活
    11. k8s、pod、容器、虚拟机概念
    12. springcloud数据库密码加密
    13. html5猜数字游戏代码,js猜数字小游戏的简单实现代码
    14. 机械振动信号13个频域指标
    15. 曾经爱过你试听,歌曲曾经爱过你mp3下载,歌词 - 郑源
    16. 2014 计算机一级 试题,2014年全国计算机一级考试选择题试题与详细答案
    17. 基于MATLAB的ASK,FSK,PSK误码率对比仿真,输出调制后波形以及误码率曲线
    18. CVPR 2023 | 一键去除视频闪烁,该研究提出了一个通用框架
    19. c语言 输出所有水仙花数
    20. R语言rlist包的使用

    热门文章

    1. 高性能mysql总结笔记_高性能MySQL第三本笔记总结(上)
    2. [Armory]2d canvas如何支持中文显示
    3. jquery获取点击按钮的id
    4. Error Code 2: Internal Error (Assertion cublasStatus == CUBLAS_STATUS_SUCCES
    5. JSP与Servlet之间传值
    6. 2023年肯尼亚签证办理指南分享
    7. Android程序测试
    8. 恶意软件实现原理解析
    9. window 10 电脑创建共享文件夹
    10. IS-IS协议分析与配置