首页 > 解决方案 > 访问者模式的常见用例是什么?

问题描述

我正在寻找访问者模式的常见用例。我可以在互联网上找到一些示例,但它们相当基本,仅解释概念,而不是当这种模式可以真正节省您的时间/生命时。

您是否有使用这种模式的真实示例?(例如,在 Github 中现有的 java 项目中)

我看不清楚它大规模解决了什么问题以及为什么开发人员可以使用它?

标签: design-patterns

解决方案


当您想向对象发送消息(即调用方法)时,访问者模式很有用,但由于编译器的类型检查而不能。例如,该对象被声明属于Animal只有方法的类型(接口) say(),并且您想smile()在该对象上调用方法。

是的,您可以修改接口Animal(添加方法smile()),但出于某种原因,您希望保持接口稳定。如果将来您需要更多方法go(),例如walk()...?

是的,您可以将Animal对象转换为您想要的每种特定类型,例如DogCat...但是出于某种原因,您希望在不关心特定动物类型方面保持此调用代码的稳定性。如果将来你有更多的动物类型Bird,比如Elephant……?毕竟,调用代码只是想让对象微笑,不想在有新的特定类型的对象时被修改。

所以,让我们将所有这些不稳定的事情委托给访问者。您将拥有SmileVisitor, GoVisitor, WalkVisitor... 的方法visit(Dog), visit(Cat)... 并像这样使用它们:

new SmileVisitor().visit(animal);

P/S:我认为您可以找到一些常见的用例,让您自己保持源代码的某些部分稳定。


推荐阅读