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 楼答案
我认为您必须这样做,以确保对所有
ICarElementVisitor
中的所有ICarElement
都有相应的visit()
方法因此,如果你写了一个新的
ICarElement
,比方说IWheel
,一年后,如果你不记得所有已经存在的访问者,你将不得不实现accept(ICarElementVisitor)
方法,这样做visitor.visit(this);
编译器会说:“iCarrelationVisitor中没有方法访问(IWheel)!”因此,您将在ICarElementVisitor
接口中添加visit(IWheel)
,编译器将说“CarElementDoVisitor不实现iCalRelationVisitor的所有方法!”您将在CarElementDoVisitor
中实现visit(IWheel)
,因此一定要避免回归我认为这样做的意义并不是无用的,事实上这是一件好事