以前看过大话设计模式,对各种模式有过一点了解,可是没怎么用,可没怎么深入去了解所以忘得很快,现在沉下心来好好研究下。但是,在看到访问者模式的时候,我对accept存在的必要性很是不理解,觉得为何不直接调用visitor的visit方法去访问 Element,不更直接,而且去除双向依赖,也是一个好的设计。于是百度搜索了N久,看到一篇文章,然后亲自测试,终于领会到accept存在的必要性,在此分享出来,供有意或者参考。
给我启发的文章链接:访问者模式讨论篇:java的动态绑定与双分派
以下是我的验证代码:
Element类:
package com.lh.test;
public abstract class Element {
public abstract void accept(IVisitor visitor);
}
Element A派生:
public class ConcreteElementA extends Element {
@Override
public void accept(IVisitor visitor) {
System.out.println("--ConcreteElementA-- 的方法--accept--调用");
visitor.visit(this);
}
public void myfuncA(){
System.out.println("--ConcreteElementA-- 的方法--myfuncA--调用");
}
}
public class ConcreteElementB extends Element {
@Override
public void accept(IVisitor visitor) {
System.out.println("--ConcreteElementB-- 的方法--accept--调用");
visitor.visit(this);
}
public void myfuncB(){
System.out.println("--ConcreteElementB-- 的方法--myfuncB--调用");
}
}
</