访问者模式
介绍
访问者模式提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作
角色
- Visitor(抽象访问者):为对象结构中每一个具体元素声明一个访问操作,从该操作的名称或参数类型可以知道需要访问的具体元素的类型,具体访问者需要实现这些方法,定义对这些元素的访问操作
- ConcreteVisitor(具体访问者):实现了每个由抽象访问者声明的操作,每个操作用于访问对象结构中一种数据类型的元素
- Element(抽象元素):一般是抽象类或者接口,定义了一个方法,该方法通常以一个抽象访问者作为参数
- ConcreteElement(具体元素):实现抽象元素定义的方法,在该方法中调用访问者的访问方法以便完成对一个访问者的访问操作
- ObjectStructure(对象结构):对象结构是一个元素的集合,用于存放元素对象,并且提供了遍历内部元素的方法
示例代码
//抽象访问者
public abstract class Visitor {
public abstract void visit(ConcreteElementA elementA);
public abstract void visit(ConcreteElementB elementB);
}
//具体访问者
public class ConcreteVisitor extends Visitor {
@Override
public void visit(ConcreteElementA elementA) {
System.out.println("Visit ConcreteElementA");
}
@Override
public void visit(ConcreteElementB elementB) {
System.out.println("Visit ConcreteElementB");
}
}
//抽象元素
public interface Element {
void accept(Visitor visitor);
}
//具体元素
public class ConcreteElementA implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
//具体元素
public class ConcreteElementB implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
}
//客户端
public class Client {
public static void main(String[] args) {
Visitor visitor = new ConcreteVisitor();
Element element = new ConcreteElementA();
element.accept(visitor);
}
}