设计模式-访问者模式

访问者模式

类型:行为型模式

实质总结:

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

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

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

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

相关推荐
钦拆大仁15 小时前
Java设计模式-单例模式
java·单例模式·设计模式
娟宝宝萌萌哒1 天前
智能体设计模式重点
人工智能·设计模式
Andy&lin1 天前
【医疗】智慧病房APP原型模板
设计模式·产品运营·人机交互·交互·健康医疗
Engineer邓祥浩1 天前
设计模式学习(22) 23-20 解释器模式
学习·设计模式·解释器模式
钦拆大仁1 天前
Java设计模式-状态模式
java·设计模式·状态模式
Engineer邓祥浩1 天前
设计模式学习(24) 23-22 策略模式
学习·设计模式·策略模式
我真的是大笨蛋1 天前
MVCC解析
java·数据库·spring boot·sql·mysql·设计模式·设计规范
Engineer邓祥浩1 天前
设计模式学习(25) 23-23 责任链模式
学习·设计模式·责任链模式
半桔1 天前
【设计模式】策略模式:可插拔算法,从硬编码到灵活适配,体会“算法解耦“思想
java·c++·算法·设计模式·策略模式
Engineer邓祥浩1 天前
设计模式学习(23) 23-21 状态模式
学习·设计模式·状态模式