有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有一种方法可以避免在访问者模式的每个元素中使用方法进行自调用?

interface ICarElementVisitor {
    void visit(Engine engine);
}

interface ICarElement {
    //want to use this
    void accept(ICarElementVisitor visitor); // CarElements have to provide accept().
}

static class Engine implements ICarElement {
    ...
    //want to avoid using this
    public void accept(ICarElementVisitor visitor) {
        visitor.visit(this);
    }
}
...
public void accept(ICarElementVisitor visitor) {
    for (ICarElement elem : elements) {
        elem.accept(visitor);
    }
    visitor.visit(this);
}
    ...
static class CarElementDoVisitor implements ICarElementVisitor {

    public void visit(Engine engine) {
        System.out.println("Starting my engine");
    }

}

有没有一种方法可以避免在访问者模式的每个元素中使用方法进行自调用,而使用父类的全局方法?或者我是否可以传递父对象,并知道没有instanceof if或switch的对象是什么实例


共 (1) 个答案

  1. # 1 楼答案

    我认为您必须这样做,以确保对所有ICarElementVisitor中的所有ICarElement都有相应的visit()方法

    因此,如果你写了一个新的ICarElement,比方说IWheel,一年后,如果你不记得所有已经存在的访问者,你将不得不实现accept(ICarElementVisitor)方法,这样做visitor.visit(this);编译器会说:“iCarrelationVisitor中没有方法访问(IWheel)!”因此,您将在ICarElementVisitor接口中添加visit(IWheel),编译器将说“CarElementDoVisitor不实现iCalRelationVisitor的所有方法!”您将在CarElementDoVisitor中实现visit(IWheel),因此一定要避免回归

    我认为这样做的意义并不是无用的,事实上这是一件好事