高尔夫游戏使用访客模式,为什么在这种情况下是个坏主意?

Golf game use visitor pattern, why is it a bad idea in this situation?

好与坏是一种选择。

就我个人而言,我不喜欢在这里使用访问者模式。

如果我们重新访问 here 中的访问者示例,简单的访问者模式就是基于方法重载来指导方法调用。

interface Visitor {
    void visit(FOO foo);
    void visit(BAR bar);
    void visit(BAZ baz);
}

如果我们将它用于您的示例,我能找到的唯一方便的方法是根据不同的环境类型使用重载。即

  • FOO => 沙子
  • 酒吧 => SlightHill 等

你可以用那种方式做你的生意。但反过来也有一些明显的缺点。

当定义添加新环境类型的要求时,您需要在访问者中不断添加不同的重载方法 interface/class。如果你从 solid principles 的角度来看,你就违反了 OCP [不过这是一个选择,而不是教条。 :)]。

对我来说更合适的方法是使用 strategy or command 模式。