针对问题

当我们需要遍历一个结构并且操作这个这个结构中的对象时,可能会写出这样的代码:

这样如果我们需要修改对element元素的操作时,需要重写整个循环。同样,如果我们要修改遍历元素的算法,也需要改写这个循环。
Visitor模式分离了对象结构的“遍历”和“对象操作”,使得这两种逻辑可以分别被修改。

介绍

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

实现

Visitor模式的静态图如下:

由UML图可以看出Visitor模式有两个类层次:一个对应于接受操作元素(遍历),一个用于定义对元素操作的访问者(操作)。

下面的协作图进一步说明了Visitor模式的协作方式:

1、遍历可以由对象结构、访问者、或独立的迭代器完成。… Read the rest