文档章节

设计模式之访问者模式

陈年之后是青葱
 陈年之后是青葱
发布于 11/17 23:56
字数 489
阅读 22
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

定义

Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. (封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。)

UML类图

角色:

  • ObjectStruture 结构对象,大白话就是容器如List,Set,Queue,Map等。
  • Element 元素抽象,就是容器类的元素
  • ConcreateElement 元素的具体实现
  • Vistor 访问者接口
  • ConcreateVistor 具体访问者

应用场景

个人觉得是常用于迭代当中针对统一抽象不同的具体类,做出不同的操作,比如以下代码:

for(Element element: elementList){
element.accept(visitor1);
element.accept(visitor2);
}

注意了accept的代码基本上都是直接把自己传入visitor,即visitor.visitorElement(this)。

这里乍一眼看很普通的一个调用,对调用类来说好像每个元素就是添加了一个观察者而已,貌似是走的一套逻辑,这里是如何实现针对不同的Element实现类进行不同的操作的勒?原理是对重载和重写的合理运用。element的accept由不同的子类重写。内部调用了visitor重载的不同方法visitorElement(ConcreateElement element),所以这里实际上根据子类类型做了动态绑定,走的不同的逻辑。也许大家又会说那么为什么要引入一个访问者勒,直接在子类里实现重写方法,不一样实现了动态绑定。确实是可以这么做,但访问者模式的意义在引入了了访问者,封装了这种不同,而不是将这种不同分散在一个个实现类当中。

© 著作权归作者所有

陈年之后是青葱
粉丝 6
博文 62
码字总数 73772
作品 0
九龙坡
程序员
私信 提问
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
310
0
《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code
2018/11/06
203
0
设计模式Java Design Pattern-工厂方法模式FactoryMethod

我的博客 一、 设计模式的分类 大体可以分为三类: 创建型模式(5个) 单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式 结构性模式(7个) 适配器模式、装饰器模式、代理模式、...

勇敢写信
2018/03/22
0
0
JavaScript设计模式总结

之前看过《JavaScript设计模式与开发实践》这本书,对书中的设计模式和一些相关案例也有了一定的了解,同时把这些设计模式的应用对应在在一些其他的项目中,进行了一些整理,如下仅供参考: ...

jefferyE
03/26
0
0
设计模式22——Visitor设计模式

Visitor访问者设计模式是在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升。 Visitor访问者设计模式的角色: (1) 访问者角色(Visitor):声明一个访问接...

小米米儿小
2014/01/27
196
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里巴巴的 Kubernetes 应用管理实践经验与教训

作者 | 孙健波(天元) 阿里巴巴技术专家 导读:本文整理自孙健波在 ArchSummit 大会 2019 北京站演讲稿记录。首先介绍了阿里巴巴基于 Kubernetes 项目进行大规模应用实践过程中遇到的问题;...

阿里巴巴云原生
15分钟前
3
0
pinpoint采样原理分析

使用pinpoint进行全链路监控时,支持对请求的采样,某条请求是否被采样,取决于整个链路开始的机器。该机器使用特定的采样算法。采样的标志会一直在链路中透传。比如在http里面,会在header里...

xiaomin0322
20分钟前
3
0
在IDEA开发工具中使用lombok

1. 首先我们需要安装IntelliJ IDEA中的lombok插件,打开IntelliJ IDEA后点击菜单栏中的File-->Settings,或者使用快捷键Ctrl+Alt+S进入到设置页面 我们点击设置中的Plugins进行插件的安装,在...

欧阳飘
21分钟前
3
0
爱码仕 5G生活畅想 (五) 每个人每个家庭都有一朵私有的云

30年前,微软让每个家庭都有一台电脑的理念成为了现实;而今云计算的观念已为老百姓们所熟识。数据就是能源;数据就是财富;谁生产了数据,这数据的所有权就归谁所有。随着原生云基础设施的完...

LitStone
23分钟前
3
0
嵌入式入门:嵌入式领域的职业发展方向是什么?

嵌入式入门:嵌入式领域的职业发展方向是什么? 在如今的IT市场上看,嵌入式的发展的应用都是广受欢迎的,在嵌入式入门学习中,我们可以发现嵌入式的发展方向有很多,门槛高低不一样。下面就...

xyd118
23分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部