1.意图
表示一个作用于某个对象结构中的各个元素的操作。它使你可以在不改变各个元素的类的
前提下定义这些元素的新操作
2.参与者
Visitor -为该对象结构ConcreteElement的每一个类声明一个visit操作。
ConcreteVisitor 实现每个visitor声明的操作
Element -定义一个Accept,它以一个访问者为参数
ConcreteElement - 实现Accept操作,该操作一个一个访问者为参数
ObjectStructure -能枚举它的类
-可以提供一个高层的接口以允许访问者访问它的元素
-可以是复合对象或者一个集合
3.结构
4.代码
public interface Element {
void accept(Visitor v);
}
public interface Visitor {
void visitor(ConcreteElementA A);
void visitor(ConcreteElementB B);
void visitor(ConcreteElementC C);
}
public class ConcreteElementA implements Element {
@Override
public void accept(Visitor v) {
v.visitor(this);
}
}
public class ConcreteElementB implements Element {
@Override
public void accept(Visitor v) {
v.visitor(this);
}
}
public class ConcreteElementC implements Element {
@Override
public void accept(Visitor v) {
v.visitor(this);
}
}
public class ConcreteVisitor implements Visitor {
@Override
public void visitor(ConcreteElementA A) {
System.out.println("ConcreteElementA");
}
@Override
public void visitor(ConcreteElementB B) {
System.out.println("ConcreteElementB");
}
@Override
public void visitor(ConcreteElementC C) {
System.out.println("ConcreteElementC");
}
}
public class Client {
public static void main(String[] args) {
List<Element> list = new ArrayList<Element>();
list.add(new ConcreteElementA());
list.add(new ConcreteElementB());
list.add(new ConcreteElementC());
Visitor v = new ConcreteVisitor();
Iterator<Element> it = list.iterator();
while(it.hasNext()){
Element e = it.next();
e.accept(v);
}
}
}