package test0806;import java.util.*;abstract class employee ...{ private String name; public String getName() ...{ return name; } public void setName(String name) ...{ this.name = name; } public employee(String name) ...{ this.name = name; } public abstract int salary();}interface Visitable ...{ public void Accept(Visitor v);}class stuff extends employee implements Visitable ...{ public stuff(String name) ...{ super(name); } @Override public int salary() ...{ return 3000; } public void Accept(Visitor v) ...{ v.visitStuff(this); }}class manager extends employee implements Visitable ...{ public manager(String name) ...{ super(name); // TODO Auto-generated constructor stub } @Override public int salary() ...{ // TODO Auto-generated method stub return 5000; } public void Accept(Visitor v) ...{ v.visitManager(this); }}interface Visitor ...{ void visitStuff(stuff s); void visitManager(manager m);}class salaPrintA implements Visitor ...{ public void visitManager(manager m) ...{ System.out.println(m.salary()); } public void visitStuff(stuff s) ...{ System.out.println(s.salary()); }}class salaPrintB implements Visitor ...{ public void visitManager(manager m) ...{ System.out.println(m.getName() + "'s salary is " + m.salary()); } public void visitStuff(stuff s) ...{ System.out.println(s.getName() + "'s salary is " + s.salary()); }}class employees ...{ private ArrayList col = new ArrayList(); private Iterator i; public void add(Visitable e) ...{ col.add(e); } public void Accept(Visitor v) ...{ i = col.iterator(); while (i.hasNext()) ...{ //System.out.println((i)); //System.out.println(i.getClass()+"DDDD"); ((Visitable) i.next()).Accept(v); } }}public class VisitorTest ...{ public static void main(String[] args) ...{ employees es = new employees(); stuff s1 = new stuff("s1"); stuff s2 = new stuff("s2"); manager m1 = new manager("m1"); es.add(s1); es.add(s2); es.add(m1); Visitor VA = new salaPrintA(); Visitor VB = new salaPrintB(); es.Accept(VA); es.Accept(VB); }}