public interface Visitable { void accept(Visitor<Visitable> visitor); } public interface Visitor<A> { void visit(A visitable); }
public class VisitableA implements Visitable { public String Call(){ return "AAA"; } public void accept(Visitor<Visitable> visitor) { visitor.visit(this); } }
public class VisitorA<A> implements Visitor<B> { public void visit(A visitable) { System.out.println(visitable.Call()); }
}
public class Client{ public static void main(String args[]) { Visitor<Visitable> visitor=new VisitorA<VisitableA>(); Visitable visitable=new VisitableA(); visitable.accept(visitor); } }