package visitor;
public interface Visable {
public void accept(PersonVisitor visitor);
}
package visitor;
public class Hand implements Visable{
private String name;
public Hand(String name){
this.name=name;
}
/**
* 可以接受访问的方法
* @param visitor
*/
public void accept(PersonVisitor visitor){
visitor.visitor(this);
}
String getHand(){
return this.name;
}
}
package visitor;
public class Leg implements Visable{
/**
* 可以接受访问的方法
* @param visitor
*/
public void accept(PersonVisitor visitor){
visitor.visitor(this);
}
}
package visitor;
/**
* 观察者接口
* @author Administrator
*
*/
public interface PersonVisitor {
/**
* 腿
* @param leg
*/
public void visitor(Leg leg);
/**
* 手
* @param hand
*/
public void visitor(Hand hand);
}
package visitor;
import java.util.Iterator;
import java.util.List;
public class Visitor implements PersonVisitor {
@Override
public void visitor(Leg leg) {
System.out.println("leg is visited");
}
@Override
public void visitor(Hand hand) {
System.out.println(hand.getHand()+"is visited");
}
public void VisitorCollections(List cons){
Iterator it = cons.iterator();
while (it.hasNext()) {
//方法1
// Object o = it.next();
// if (o instanceof Visable)
// ((Visable)o).accept(this);
// }
//方法2
Visable o = (Visable)it.next();
o.accept(this);
}
}
}
package visitor;
import java.util.ArrayList;
import java.util.List;
public class VisitorMain {
public static void main(String[] args) {
Hand hand = new Hand("i am a hand");
Leg leg = new Leg();
Visitor visitor = new Visitor();
leg.accept(visitor);
hand.accept(visitor);
List cons = new ArrayList();
cons.add(leg);
cons.add(hand);
visitor.VisitorCollections(cons);
}
}