在你告诉我已经有了一个类似的问题之前,是的,我知道,我已经读过它。但那里的问题集中在何时使用访问者设计模式,而我对为什么感兴趣。
我知道这些东西是如何运作的。经典的动物,狗,猫例子总是能很好地解释清楚。
问题是这段代码:
int main()
{
Cat c;
Sound theSound;
c.letsDo(&theSound);
}
对我来说,这似乎很不自然。为什么?
我的意思是,是的,这样我就有了我的Dog和Cat模型未区分(这是我第一次在英语中使用这个词),因为真正的实现被隐藏在Sound类下面,但这不仅仅是一种拖累你代码的方式吗?难道多态性不足以做到这一点吗?
对我来说,不同之处在于使用多态性需要编辑每个类(但模型保持不变,对吧?),而使用访问者设计模式只需要编辑一个类。