Step 1: Create an abstract visitor
public interface Visitor { public void visit(Subject sub); }
Step 2: Specific Visitors
public class MyVisitor implements Visitor { @Override public void visit(Subject sub) { System.out.println("Access object: "+sub.getSubject()); } }
Step 3: The accessed object interface Subject
public interface Subject { //accept the object that will access it public void accept(Visitor visitor); //getSubject() gets the property to be accessed public String getSubject(); }
Step 4: The concrete element node implements the acceptance operation MySubject specified by the abstract node
public class MySubject implements Subject{ @Override public void accept(Visitor visitor) { visitor.visit(this); } @Override public String getSubject() { return "happy"; } }
Step 5: Test
public class Test { public static void main(String[] args) { Visitor visitor=new MyVisitor(); Subject sub=new MySubject(); sub.accept(visitor); } }