// ********** VisitorDemo.java ********** interface Visitor { public void visit(ConcreteElementA e); public void visit(ConcreteElementB e); } class ConcreteVisitor1 implements Visitor { public void visit(ConcreteElementA e) { e.operationA(); } public void visit(ConcreteElementB e) { e.operationB(); } } class ConcreteVisitor2 implements Visitor { public void visit(ConcreteElementA e) { e.operationA(); } public void visit(ConcreteElementB e) { e.operationB(); } } interface Element { public void accept(Visitor v); } class ConcreteElementA implements Element { public void accept(Visitor v) { v.visit(this); } public void operationA() {} } class ConcreteElementB implements Element { public void accept(Visitor v) { v.visit(this); } public void operationB() {} } public class VisitorDemo { private static final int MAX = 100000; public static void main(String args[]) { long t1 = System.currentTimeMillis(); for (int i=0; i