我已经编写了如下的访问者模式,但我不明白什么是单次和双次调度。AFAIK,单调度是调用基于调用者类型的方法,而双调度是调用基于调用者类型和参数类型的方法。
我猜双重分派发生在单类层次结构中,但为什么访问者类有两个类层次结构,但它仍然被认为是双重分派。
void floppyDisk::accept(equipmentVisitor* visitor)
{
visitor->visitFloppyDisk(this);
}
void processor::accept(equipmentVisitor* visitor)
{
visitor->visitProcessor(this);
}
void computer::accept(equipmentVisitor* visitor)
{
BOOST_FOREACH(equipment* anEquip, cont)
{
anEquip->accept(visitor);
}
visitor->visitComputer(this);
}
void visitFloppyDisk(floppyDisk* );
void visitProcessor(processor* );
void visitComputer(computer* );
请使用我提供的示例代码进行解释。
AFAIK,第一次调度发生在调用接受的对象上,第二次调度发生在调用访问方法的对象上。
谢谢。