访问者模式

访问者模式


行为和对象的解耦,元素内部传入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 @   lunamu  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示