介绍
访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。表示一个作用于其对象结构中的各元素的操作。它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作。
访问者模式建议将新行为放入一个名为访问者的独立类中, 而不是试图将其整合到已有类中。 现在, 需要执行操作的原始对象将作为参数被传递给访问者中的方法, 让方法能访问对象所包含的一切必要数据。
如何解决:在被访问的类里面加一个对外提供接待访问者的接口。
关键代码:在数据基础类里面有一个方法接受访问者,将自身引用传入访问者。
真实世界类比
优秀的保险代理人总能为不同类型的团体提供不同的保单。
假如有这样一位非常希望赢得新客户的资深保险代理人。 他可以拜访街区中的每栋楼, 尝试向每个路人推销保险。 所以, 根据大楼内组织类型的不同, 他可以提供专门的保单:
- 如果建筑是居民楼, 他会推销医疗保险。
- 如果建筑是银行, 他会推销失窃保险。
- 如果建筑是咖啡厅, 他会推销火灾和洪水保险。
访问者模式示例:
执行程序,输出结果:
Displaying Mouse.
Displaying Keyboard.
Displaying Monitor.
Displaying Computer.
在 Java 中使用模式
访问者不是常用的设计模式, 因为它不仅复杂, 应用范围也比较狭窄。
1、javax.lang.model.element.AnnotationValue
和 AnnotationValueVisitor
2、javax.lang.model.element.Element
和 ElementVisitor
3、javax.lang.model.type.TypeMirror
和 TypeVisitor
4、java.nio.file.FileVisitor
和 SimpleFileVisitor
5、javax.faces.component.visit.VisitContext
和 VisitCallback
转:https://www.runoob.com/design-pattern/visitor-pattern.html
转:https://refactoring.guru/