访客行为模式的优点和缺点是什么?

时间:2015-10-29 21:22:13

标签: visitor

我正在做一个关于访客设计模式的演示,我理解它是如何工作的,但我还没有找到“定义”的优点和缺点,我不想自己推测其优缺点,因为我可以设置虚假信息。

2 个答案:

答案 0 :(得分:1)

以下是我对Visitor模式的一些看法:

优点:

  • 主要优点:为所有元素添加操作非常简单,因为您只需要实现访问者界面。无需修改每个Element对象即可添加操作。
  • 您可以在一个Visitor类中重新组合多个Elements共有的操作。该操作的代码只在该访问者类中。如果您想要专门了解一个操作的代码,则可以使代码更易于阅读。

缺点:

  • 您的访问者可以修改您的元素,因为元素的实例会发送给访问者。建议不要这样做,因为它会导致side effects。这可以通过使对象不可变来解决。
  • Element对象的代码分布在所有Visitor对象中。因此,Element的逻辑存在于许多类中。如果你想查看一个Element对象的代码,它会使代码更难阅读。
  • 每次操作都需要一个新的访客类。

答案 1 :(得分:0)

除了@GammaOmega所写的内容之外,访问者模式的另一个缺点是它是侵入性的,因为为了支持访问者模式,树结构中使用的类必须提供{{1} }操作。如果您需要使用不提供accept()操作的第三方树结构,则不能使用访客模式。

下面的伪代码显示了如何使用accept()操作来进行类似访问者的树遍历而不污染树节点类。

accept()