Objective: keep the code structure, extend the function by adding visitor. it is follow the principle of Software entities should be open for extension,but closed for modification.
famous implementation: swing, button, button.addActionListener(ActionListener a) and ActionListener, actionlistener.actionPerformed(Actionevent e)
Element:
Visitor Interface
Acceptor Interface
visitorImp1, visitor Imp2 .....
acceptorImp1, acceptorImp2....
Sample:
Interface visitor{
public void visit(Beijing b);
public void visit(Shanghai s);
}
Interface City{
public void travel(visitor v);
}
public class Chinese implemented visitor{
public void visit(Beijing b){
System.out.println("I am chinese in Beijing");
}
public void visit(Shanghai s){
System.out.println("I am chinese in Shanghai");
}
}
public class Japanese implemented visitor{
public void visit(Beijing b){
System.out.println("I am Japanese in Beijing");
}
public void visit(Shanghai s){
System.out.println("I am Japanese in Shanghai");
}
}
public class English implemented vistor{
public void visit(Beijing b){
System.out.println("I am English in Beijing");
}
public void visit(Shanghai s){
System.out.println("I am English in Shanghai");
}
}
public class Beijing implemented City{
public void travel(visitor v){v.visit(this);}
}
public class ShangHai implemented City{
public void travel(visitor v){v.visit(this);}
}