访问者模式是Java中的一种行为型设计模式,它允许你定义在不改变被访问对象(如类、接口等)结构的前提下,对其内部的元素访问和操作。该模式适用于需要对一个复杂对象结构(如代码中的类层次结构)进行多种不同操作的场景。
示例代码
// 定义被访问者接口
interface Element {
void accept(Visitor visitor);
}
// 定义具体的被访问者类
class ConcreteElement implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
// 具体元素特有的方法
public String operation() {
return "ConcreteElement";
}
}
// 定义访问者接口
interface Visitor {
void visit(ConcreteElement concreteElement);
}
// 定义具体的访问者类
class ConcreteVisitor implements Visitor {
@Override
public void visit(ConcreteElement concreteElement) {
System.out.println(concreteElement.operation() + " visited by ConcreteVisitor.");
}
}
// 测试代码
public class Main {
public static void main(String[] args) {
Element element = new ConcreteElement();
Visitor visitor = new ConcreteVisitor();
// 在不改变被访问者对象结构的情况下,对其内部元素进行访问和操作
element.accept(visitor);
}
}
以上代码中,Element
接口定义了一个 accept
方法,该方法接收一个 Visitor
参数,用于在 ConcreteElement
类中调用 Visitor
实例的 visit
方法进行具体的访问和操作。
ConcreteElement
实现了 Element
接口,并重写了 accept
方法。ConcreteVisitor
实现了 Visitor
接口,并重写了 visit
方法,用于对 ConcreteElement
元素进行具体的访问和操作。
在测试代码中,我们创建了一个 ConcreteElement
实例和一个 ConcreteVisitor
实例,并将 ConcreteElement
实例传递给 ConcreteVisitor
实例的 visit 方法,从而实现了对 ConcreteElement
元素的访问和操作。