具有继承关系的访问者模式

时间:2019-07-17 10:49:24

标签: java oop object visitor visitor-pattern

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 /来将访问者同时应用于基类和扩展类?

0 个答案:

没有答案