设计模式-访问者模式

访问者模式

类型:行为型模式

实质总结:

给一个模块的若干功能同时扩展算法。

角色:元素,访问者,数据结构。数据结构对应模块,元素对应功能,算法对应访问者。

java 复制代码
interface Visitor {
    void visit(ConcreteElement element);
}

interface Element {
    void accept(Visitor visitor);
}

class ConcreteElement implements Element {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}

class ConcreteVisitor implements Visitor {
    @Override
    public void visit(ConcreteElement element) {
        System.out.println("Visiting element");
    }
}

这里要使用element的accept方法执行某项功能,实际是通过调用visitor的visit方法。如果要扩展accept的算法,即换个visitor,调用新的visitor的visit方法即可。ObjectStructure和Element及ConcretElement的数据结构都不必变化,只要新增visitor接口的实现类即可。满足单一职责原则,每个visitor实际就是干活的,不影响其他visitor以及element。实际干活去的是visitor。功能拥有者是element。element不变,要切换算法,就换调accept的参数(visitor)就行。

所有的模式都是为了代码能够复用和解耦。

相关推荐
困死了11113 小时前
设计模式-注册表模式
设计模式
桦说编程4 小时前
Guava Forwarding系列类详解——装饰器模式实战
java·后端·设计模式
How_doyou_do10 小时前
常见的设计模式
前端·javascript·设计模式
alibli10 小时前
深度理解设计模式——概述,SOLID原则
设计模式
AM越.12 小时前
Java设计模式超详解--观察者设计模式
java·开发语言·设计模式
ezreal_pan13 小时前
基于券类型路由的渐进式重构:函数式选项模式与管道模式的完美结合
设计模式·重构·golang·选项函数
有一个好名字13 小时前
设计模式-单例模式
java·单例模式·设计模式
赵得C13 小时前
2025下半年软件设计师考前几页纸
java·开发语言·分布式·设计模式·性能优化·软考·软件设计师
alibli14 小时前
Alibli深度理解设计模式系列教程
c++·设计模式
老朱佩琪!14 小时前
Unity迭代器模式
unity·设计模式·迭代器模式