相关疑难解决方法(0)

访客模式的实际优势是什么?有哪些替代方案?

我读了很多关于访客模式及其所谓的优点.然而,对我而言,在实践中应用它们似乎并没有那么多优点:

  • "方便"和"优雅"似乎意味着大量的样板代码
  • 因此,代码很难遵循."接受"/"访问"也不是很具描述性
  • 如果您的编程语言没有方法重载(即Vala),甚至更糟糕的样板代码
  • 您通常不能在不修改所有类的情况下向现有类型层次结构添加新操作,因为只要您需要具有不同参数和/或返回值的操作(类更改),您就需要在任何地方使用新的"接受"/"访问"方法到处都是这个设计模式应该避免的一件事!?)
  • 向类型层次结构添加新类型需要更改所有访问者.此外,您的访问者不能简单地忽略类型 - 您需要创建一个空访问方法(样板再次)

当你想要做的事实上是这样的时候,这一切似乎都是非常多的工作:

// Pseudocode
int SomeOperation(ISomeAbstractThing obj) {
    switch (type of obj) {
        case Foo: // do Foo-specific stuff here
        case Bar: // do Bar-specific stuff here
        case Baz: // do Baz-specific stuff here
        default: return 0; // do some sensible default if type unknown or if we don't care
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到的唯一真正的优势(我在任何地方都没有看到过):访问者模式可能是在cpu时间方面实现上述代码片段的最快方法(如果你没有双重调度的语言或者以上述伪代码的方式进行有效的类型比较).

问题:

  • 那么,我错过了访客模式的哪些优势?
  • 可以使用哪些替代概念/数据结构来使上述虚构代码示例同样快速运行?

language-agnostic visitor-pattern

11
推荐指数
3
解决办法
3269
查看次数

标签 统计

language-agnostic ×1

visitor-pattern ×1