设计模式-访问者模式

访问者模式

类型:行为型模式

实质总结:

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

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

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

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

相关推荐
砍光二叉树1 小时前
【设计模式】行为型-解释器模式
设计模式·解释器模式
砍光二叉树1 小时前
【设计模式】行为型-备忘录模式
设计模式·备忘录模式
光影少年1 小时前
实现发布订阅模式
前端·javascript·设计模式
无籽西瓜a2 小时前
【西瓜带你学设计模式 | 第十一期 - 模板方法模式】模板方法模式 —— 流程骨架与钩子实现、优缺点与适用场景
java·后端·设计模式·软件工程·模板方法模式
砍光二叉树15 小时前
【设计模式】行为型-中介者模式
设计模式·中介者模式
sanzk19 小时前
工厂方法模式
设计模式
大数据新鸟21 小时前
设计模式详解——外观模式
设计模式·外观模式
缘友一世1 天前
PentestGPT V2源码研究之工具层设计模式
设计模式
yinghuoAI20261 天前
电商视觉进入“无人区”:萤火AI如何用三把“手术刀”重构设计 workflow
设计模式·新媒体运营·产品运营·流量运营·用户运营·内容运营·设计规范
sg_knight1 天前
设计模式实战:观察者模式(Observer)
python·观察者模式·设计模式