8

允许访问者修改接收者的状态通常是可以接受的,还是应该改为命令模式?

4

4 回答 4

6

访问者模式的目的是允许在不修改该层次结构的情况下将新操作添加到类层次结构中。我从未见过有人建议只接受只读操作。唯一的限制是添加的操作只能使用类层次结构的公共接口。

于 2010-05-18T14:11:42.310 回答
2

我认为您不能一概而论地说明修改任何事物的状态是好是坏。我认为修改状态是可以的,只要它不影响访问逻辑本身。例如,您可以编写一个访问者,访问文件夹结构下的所有文件并将文件名重命名为大写。

于 2010-05-18T14:05:04.417 回答
1

Microsoft 的访问者修改接收器的示例是ExpressionVisitor。ExpressionVisitor 类的目的是修改表达式树。所以我猜微软至少认为这是可以接受的。

于 2011-07-21T16:47:06.073 回答
1

每种模式都有自己的优点、缺点和用例。

您可以使用 Command模式来

  1. 解耦命令的调用者和接收者

  2. 实现回调机制

  3. 实现撤消和重做功能

  4. 维护命令历史

Visitor在以下场景中使用模式:

  1. 必须对结构中分组的不同类型的对象执行类似的操作
  2. 您需要执行许多不同且不相关的操作。它将操作与对象结构分开
  3. 必须在不改变对象结构的情况下添加新操作

相关文章:

使用命令设计模式

什么时候应该使用访问者设计模式?

于 2016-02-15T10:22:01.787 回答