在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。
根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
意图
主要将数据结构与数据操作分离。
主要解决
稳定的数据结构和易变的操作耦合问题。
何时使用
需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作”污染”这些对象的类,使用访问者模式将这些封装到类中。
如何解决
在被访问的类里面加一个对外提供接待访问者的接口。
关键代码
在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。
基本代码
示例
男人女人在不同情境下的反应
步骤1 创建一个表示元素的接口
步骤2 创建扩展了上述类的实体类
步骤3 定义一个表示访问者的接口
步骤4 创建实现了上述类的实体访问者
步骤5 使用访问者访问对象
后记
访问者模式适应于数据结构相对稳定的系统。
她把数据结构和作用域结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化,目的是要把处理从数据结构分离出来。
有比较稳定的数据结构,又有易于变化的算法,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易,缺点也是使增加新的数据结构变得困难了。
大多数时候你并不要访问者模式,但当你一旦需要访问者模式时,那就是真的需要它了。
访问者模式的能力和复杂性是把双刃剑,只有当你真正需要它的时候,才考虑使用它。