好吧,在将此标记为重复之前让我自己澄清一下.我正在阅读访客模式及其适用用途.
我偶然发现了这篇文章: 我什么时候应该使用访客设计模式?
编写第一个答案的用户说如下:
现在我们想要在层次结构中添加一个新操作,即我们希望每个动物发出声音.对于层次结构这么简单,您可以使用直接多态:
...
但是以这种方式进行,每次要添加操作时,必须将接口修改为层次结构的每个类.
现在,我基本上从他的角度看出为什么需要它,它基本上是一种减少编译时间的方法,因为不是每次你想要将新的多态方法添加到类层次结构时,整个层次结构都会被重新编译.
但他也说,只要它是一个"简单"的层次结构,就可以在层次结构中添加一个新的多态方法.但我的问题是你什么时候设定你的界限并决定什么是简单的,什么不是.
此外,如果层次结构是一个复杂的层次结构,但添加一个新方法只是使得和实例方法完全合理,而不是在一个完全不同的类中进行操作?
再搜索一下,我发现这篇文章解释了访客模式,并使用了 http://butunclebob.com/ArticleS.UncleBob.IuseVisitor
作者给出了一个示例,其中编写实例方法使对象耦合到某个东西并将该方法移动到另一个类(访问者)中断了解耦.这对我来说更有意义,但我仍然不太确定何时应该真正使用这个模式,"每次你想要添加一个新的多态方法时改变层次结构时间的第一个论点......"在我看来似乎一个借口,因为如果一个方法似乎适合层次结构它应该在逻辑上,假设动物示例是一个非常复杂的层次结构,我会决定添加make sound方法,添加一个实例方法将是一个合乎逻辑的选择(在我的心神).
但也许我错了,所以我在这里要求更多地了解这一点,也许有人可以启发我.