内容纲要
访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不修改现有类结构的情况下,为类中的一组对象添加新的操作。访问者模式将数据结构和数据操作分离,使得在添加新操作时,不需要修改原有数据结构。
下面是一个简单的Java代码示例,以说明访问者模式的使用:
首先,我们定义一个元素接口(Element):
public interface Element {
void accept(Visitor visitor);
}
接着,我们为每个具体元素实现这个接口:
public class ConcreteElementA implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visitConcreteElementA(this);
}
public String operationA() {
return "具体元素A的操作。";
}
}
public class ConcreteElementB implements Element {
@Override
public void accept(Visitor visitor) {
visitor.visitConcreteElementB(this);
}
public String operationB() {
return "具体元素B的操作。";
}
}
然后,我们定义一个访问者接口(Visitor):
public interface Visitor {
void visitConcreteElementA(ConcreteElementA element);
void visitConcreteElementB(ConcreteElementB element);
}
为每个具体访问者实现这个接口:
public class ConcreteVisitor implements Visitor {
@Override
public void visitConcreteElementA(ConcreteElementA element) {
System.out.println("访问者对 " + element.operationA() + " 进行操作。");
}
@Override
public void visitConcreteElementB(ConcreteElementB element) {
System.out.println("访问者对 " + element.operationB() + " 进行操作。");
}
}
现在,我们可以在客户端代码中使用访问者模式:
public class VisitorPatternDemo {
public static void main(String[] args) {
List<Element> elements = new ArrayList<>();
elements.add(new ConcreteElementA());
elements.add(new ConcreteElementB());
Visitor visitor = new ConcreteVisitor();
for (Element element : elements) {
element.accept(visitor);
}
}
}
输出结果:
访问者对 具体元素A的操作。 进行操作。
访问者对 具体元素B