命令模式与访客模式

时间:2010-05-18 13:54:54

标签: design-patterns command-pattern visitor-pattern mutability

允许访问者修改Receiver的状态或者是否应该是Command模式通常是否可接受?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

我认为你无法全面陈述修改任何状态是好还是坏。我认为只要它不影响访问逻辑本身就可以修改状态。例如,您可以编写访问文件夹结构下的所有文件的访问者,并将文件名重命名为大写。

答案 2 :(得分:1)

微软的访问者修改接收者的例子是ExpressionVisitor。 ExpressionVisitor类的目的是修改表达式树。所以我想微软至少认为它是可以接受的。

答案 3 :(得分:1)

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

您可以使用Command模式

  1. 解密调用者&命令接收者

  2. 实施回调机制

  3. 实施撤消和重做功能

  4. 维护命令历史记录

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

    1. 必须对在结构
    2. 中分组的不同类型的对象执行类似的操作
    3. 您需要执行许多不同且不相关的操作。它将 Operation 与对象 Structure
    4. 分开
    5. 必须添加新操作而不更改对象结构
    6. 相关帖子:

      Using Command Design pattern

      When should I use the Visitor Design Pattern?