Java中模拟双分派 作为命令模式的应用,得到了一个有用的结构。从该结构出发唾手可得访问者模式。
再次说明,yqj2065不关心访问者模式的“对象结构”。
双分派中的结构,如图所示。
如果一个类OverloadUnit定义了foo(Z1)、 foo(Z2)方法,Z作为命令角色定义handleFoo()帮助它完成双分派。当我们想看见a.foo(b)这一完整的双分派演示,原先的OverloadUnit修改为X类层次。此时,命令的执行者不再是固定的OverloadUnit,所以,Z需要一个注入方法
package method.command.doubleDispatch2;
public abstract class Z {
public abstract void setX(X receiver);
public abstract void say();
public abstract void walk();
public abstract void handleFoo();// Command
}
子类
package method.command.doubleDispatch2;
import static tool.Print.*;
public class Z1 extends Z {
p