在你告诉我已经有一个类似的问题之前,是的,我知道,我已经读过了。但是那里的问题集中在什么时候,我对为什么感兴趣。
我明白事情是如何运作的。经典的动物、狗、猫的例子总是很有魅力。
问题是这段代码
int main()
{
Cat c;
Sound theSound;
c.letsDo(&theSound);
}
对我来说似乎很不自然。为什么?
我的意思是,是的,这样我的 Dog 和 Cat 模型就没有区别了(顺便说一句,我第一次在英语中使用这个词),因为真正的实现隐藏在 Sound 类下,但这不仅仅是一种压低代码的方法? 多态性还不足以做这样的事情吗?
对我而言,不同之处在于,使用多态性,您必须编辑每个类(但模型保持不变,对吗?),而您只需使用访问者设计模式编辑一个类。