访问者模式

访问者模式


行为和对象的解耦,元素内部传入this,实现多态

public interface Element {
    void accept(Visitor visitor);
}
public interface Visitor {
    void visit(Element element);
}
public class ConcreteElementType1 implements Element {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}
public class ConcreteElementType2 implements Element {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}
public class ConcreteVisitor implements Visitor {
    @Override
    public void visit(Element element) {
        // 在这里处理元素的逻辑
        System.out.println("访问元素: " + element);
    }
}
public class ConcreteVisitor2 implements Visitor {
    @Override
    public void visit(Element element) {
        // 另一种行为
        System.out.println("访问元素: " + element);
    }
}

使用

public class Main {
    public static void main(String[] args) {

        Visitor extractor = new ConcreteVisitor();
        Visitor compressor = new ConcreteVisitor1();

        // 创建不同的对象
        List<Element> resourceFiles = new ArrayList<>();
        resourceFiles.add(new ConcreteElementType1());
        resourceFiles.add(new ConcreteElementType2());

        // 对对象访问执行行为
        for (Element resourceFile : resourceFiles) {
            resourceFile.accept(extractor);
            resourceFile.accept(compressor);
        }
    }
}
  • 元素和行为都抽象,定义的方法是固定的,对象实现的接受访问者实现也是固定的,变化的是Visitor 的实现
posted @ 2024-10-18 14:16  lunamu  阅读(17)  评论(0)    收藏  举报