Skip to content

访问者模式

基础概念

什么是访问者模式?

答案: 访问者模式(Visitor Pattern)表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

使用场景

  • 对象结构稳定,但操作多变
  • 需要对对象结构中的对象进行很多不同的操作

优点

  • 增加新操作容易
  • 将有关元素对象的访问行为集中到一个访问者对象中

缺点

  • 增加新元素困难
  • 破坏封装

实现方式

java
// 访问者接口
public interface Visitor {
    void visit(ConcreteElementA element);
    void visit(ConcreteElementB element);
}

// 元素接口
public interface Element {
    void accept(Visitor visitor);
}

// 具体元素A
public class ConcreteElementA implements Element {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }

    public void operationA() {
        System.out.println("元素A的操作");
    }
}

// 具体元素B
public class ConcreteElementB implements Element {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }

    public void operationB() {
        System.out.println("元素B的操作");
    }
}

// 具体访问者
public class ConcreteVisitor implements Visitor {
    @Override
    public void visit(ConcreteElementA element) {
        element.operationA();
    }

    @Override
    public void visit(ConcreteElementB element) {
        element.operationB();
    }
}

// 使用
List<Element> elements = Arrays.asList(
    new ConcreteElementA(),
    new ConcreteElementB()
);
Visitor visitor = new ConcreteVisitor();
for (Element element : elements) {
    element.accept(visitor);
}

练习题

  1. 访问者模式的应用场景?
  2. 访问者模式的优缺点?
  3. 如何扩展新的访问者?

Released under the MIT License.