大话设计模式28:访问者模式
目录
大话设计模式:28.访问者模式
访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
TL;DR:利用双分派技术,元素将自己传给访问者,将对象的处理从数据结构分离出来,使得无须改动元素本身,即可添加新的操作
1.优点
- 将数据结构和作用于结构上的操作解耦
- 使得算法操作的增加变得容易,因为其将元素有关的操作集中到一个访问者对象当中
2.实现细节
- Visitor 类:为该对象结构中 ConcreteElement 的每一个类声明一个 visit 操作
- ConcreteVisitor 类:具体访问者类,实现每个由 Visitor 声明的操作,每个操作是实现算法的一部分,而该算法片段对应于结构中对象的类
- Element 类:定义一个 Accept 操作,接收一个访问者为参数
- ConcreteElement 类:具体元素,实现 Accept,调用访问者的 visit 方法,并将自己作为参数传入 visit 方法(双分派技术),实现处理与数据结构的分离
- ObjectStructure 类:能枚举它的元素,提供一个高层的接口以允许访问者访问它的元素
3.使用场景
- 数据结构行相对稳定的系统,又有易于变化的算法