设计模式之访问者模式

Java36

根据设计模式的创始人的说法,在大多数情况下,您不需要访问者模式,但当您需要访问者模式时,您确实需要它。您可以看到,应用程序场景很少,但当您需要它时,它是必不可少的,因此本文开始学习最后一种设计模式-访问者模式。

[En]

In most cases you don't need the visitor pattern, but when you need the visitor pattern, you really need it, according to the founder of the design pattern. You can see that there are few application scenarios, but it is indispensable when you need it, so this article begins to learn about the last design pattern-the Visitor pattern.

一、概念理解

访问者模式概念:封装作用于对象结构中的元素的操作,允许您定义作用于这些元素的新操作,而无需更改它们的类。

[En]

Visitor pattern concept: encapsulates operations that act on elements in an object structure, allowing you to define new operations that act on those elements without changing their classes.

通俗的解释就是,系统中有一些固定结构的对象(元素),在其内部提供一个accept()方法用来接受访问者对象的访问,不同的访问者对同一元素的访问内容不同,所以使得相同的元素可以产生不同的元素结果。

比如在一个人事管理系统中,有多个工种的员工和多个老板,不同的老板对同一个员工的关注点是不同的,CTO可能关注的就是技术,CEO可能更注重绩效。

员工是一个稳定的元素,老板是可变的,对应的概念是:封装员工的一些操作,可以添加一个新的老板来访问同一个员工,而不需要更改Employee类。

[En]

The employee is a stable element, and the boss is changeable, and the corresponding concept is: encapsulating some operations of the employee, you can add a new boss to visit the same employee without changing the employee class.

访问者模式中有五个角色:抽象元素、具体元素、抽象访问者、具体访问者和结构元素。

[En]

There are five roles in the visitor pattern: abstract elements, concrete elements, abstract visitors, concrete visitors, and structural elements.

抽象元素:定义一个接受访问的方法accept,参数为访问者对象。

具体元素:提供接受访问者访问的具体实现调用访问者的访问visit,并定义额外的数据操作方法。

抽象访问者:这个角色主要是定义对具体元素的访问方法visit,理论上来说方法数等于元素(固定类型的对象,也就是被访问者)个数。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

windows安装mysql8(5分钟)

1、下载 MySQL https://dev.mysql.com/downloads/mysql/ 下载完成后,解压缩到你的目录里。 2、配置 MySQL 的配置文件 创建一个文件,名称为: my.i...
Java

Markdown学习

Markdown学习 标题 三级标题 四级标题 字体 Hello World! Hello World! Hello World! Hello World! 引用
Java

乐观锁与悲观锁

它总是假设最坏的情况。每次你得到数据时,你都会假设其他人会修改它。因此,每次获取数据时,都会锁定它。通过这种方式,如果有人想要获取数据,他们会阻止它,直到它获得锁(共享资源每次只被一个线程使用,其他线...
Java

JavaFx制作简易的mp4播放器

在制作视频播放器时,用JAVA语言编写是个很方便的选择。虽然JavaFX从JDK11开始就分离,但是在网上稍微搜索下就可以找到解决方法(在命令行下运行的命令是最清楚的)。原谅我不太聪明,花了一整天,拼...
Java

CMS前世今生

CMS一直是面试中的常考点,今天我们用通俗易懂的语言简单介绍下。 垃圾回收器为什么要分区分代? 如上图:JVM虚拟机将堆内存区域分代了,先生代是朝生夕死的区域,老年代是老不死的区域,不同的年代对象有不...
Java

ch03 Java基础

JAVA基础 JAVA基础 数据类型 类型转换 变量 类变量和实例变量的区别和联系 常量 变量命名规范 运算符 位运算 包机制 JavaDoc 数据类型 强类型语言 要求变量的使用要严格符合规定,所有...