设计模式-访问者模式

访问者模式

类型:行为型模式

实质总结:

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

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

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)就行。

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

相关推荐
饼干哥哥2 小时前
字节Seedance2.5终于上线,这次在收割谁?
人工智能·设计模式·前端框架
董员外3 小时前
RAG 系统进化论(六):GraphRAG(基于知识图谱的 RAG),从相似文本走向实体关系
人工智能·后端·设计模式
鬼鬼鬼5 小时前
从 Prompt 到 Harness:企业级 Agent 工程的完整演进之路
设计模式·架构·ai编程
啦啦啦啦啦zzzz6 小时前
设计模式:原型模式
c++·设计模式·原型模式
董员外7 小时前
RAG 系统进化论(五):Corrective RAG 与 Self-RAG,让系统发现并纠正错误
人工智能·后端·设计模式
workflower10 小时前
高质量数据集的类型
人工智能·机器学习·设计模式·自然语言处理·机器人
啦啦啦啦啦zzzz1 天前
工具:动态类工厂和用配置文件存储属性
c++·设计模式·工具·动态工厂
Nontee1 天前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
choumin1 天前
行为型模式——模板方法模式
c++·设计模式·模板方法模式·行为型模式
啦啦啦啦啦zzzz1 天前
设计模式:建造者模式
c++·设计模式·建造者模式