我已经看到了几个演示访问者模式的示例。在所有这些方法中,每个派生的访问元素都实现了通常称为 Accept() 方法。
在颜色层次结构中,此方法可能如下所示:
void Red::accept(Visitor *v)
{
v->visit(*this);
}
void Blue::accept(Visitor *v)
{
v->visit(*this);
}
当访问者及其继承者具有以下方法时:
visit(Red red);
visit(Blue blue)
我的问题是为什么不在基类中以相同的方式实现它(在这个例子中Color
:)并且多态性将完成这项工作,即正确的访问将被调用,因为当对象是时thisRed
的动态类型是Red
取消引用它会产生一个Red
这反过来会导致访问(红色)被调用?
我错过了什么?