它的类型是使用它的类的类型.事实上,对文章中的访问者模式起作用至关重要.
访问者模式分两步实现双重调度 – 在被访问对象(第一站)中选择适当的接受方法,然后在访问者中选择适当的访问方法(第二站).第一站是通过覆盖来实现的;第二站是通过重载实现的.
请注意,没有必要对第二条腿使用重载.实际上,通常不在那里使用它以获得更好的可读性.比较这两个实现:
// Copied from Listing 29-2
public interface ModemVisitorOverload
{
void visit(HayesModem modem);
void visit(ZoomModem modem);
void visit(ErnieModem modem);
}
public interface ModemVisitorNoOverload
{
void visitHayes(HayesModem modem);
void visitZoom(ZoomModem modem);
void visitErnie(ErnieModem modem);
}
第二个实现不使用重载.它以完全相同的方式工作,除了代码的人类读者立即看到发生了什么.