Visitorパターンはデータ部と処理部に階層を分けて処理を定義するパターンです。
package com.example.visitor;
public interface Visitor {
public void visit(ConcreteElement1 group);
public void visit(ConcreteElement2 department);
}
package com.example.visitor;
public class ConcreteVisitor implements Visitor {
public void visit(ConcreteElement1 group) {
}
public void visit(ConcreteElement2 department) {
}
}
package com.example.visitor;
public interface Element {
public void accept(Visitor visitor);
}
package com.example.visitor;
public class ConcreteElement1 implements Element {
public ConcreteElement1() {
}
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
package com.example.visitor;
public class ConcreteElement2 implements Element{
public ConcreteElement2() {
}
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
package com.example.visitor;
public class Main {
public static void main(String[] args) {
try {
Element element1 = new ConcreteElement1();
Element element2 = new ConcreteElement2();
element1.accept(new ConcreteVisitor());
element2.accept(new ConcreteVisitor());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Elementがデータ部、Visitorが処理部になっていて、
visitを実行時にElementのクラスによって実行する処理を切り替えています。