public class BaseEvent{
private String baseAttribute;
accept(EventVisitor visitor){
visitor.visit(this);
}
}
public class EventA extends BaseEvent{
private String eventAAttribute;
accept(EventVisitor visitor){
visitor.visit(this);
}
}
public class EventB extends BaseEvent{
private String eventBAttribute;
accept(EventVisitor visitor){
visitor.visit(this);
}
}
public class SummaryVisitor implements EventVisitor{
List<String> summary = new ArrayList<>();
visit(BaseEvent event){
summary.add("baseAttribute : "+event.getBaseAttribute());
}
visit(EventA event){
visit((BaseEvent)event)
summary.add("eventAAttribute : "+event.getEventAAttribute());
}
visit(EventB event){
visit((BaseEvent)event)
summary.add("eventAAttribute : "+event.getEventAAttribute());
}
public List<String> getSummary(){
return this.summary
}
}
之所以这样做是因为访问者模式而不是通过向print()
和EventA
添加EventB
函数,是因为它允许使用单个{{ 1}}类,这也将“访问者”逻辑保持在一个位置,而没有在所有其他类之间隔开。
是否有一种方法可以避免Visitor
的转换,但仍可以通过使用其他设计模式/等重新设计this /来将访问者同时应用于基类和扩展类?