设计模式-访问者模式

访问者模式

类型:行为型模式

实质总结:

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

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

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

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

相关推荐
七月丶20 小时前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR
人工智能·设计模式·程序员
刀法如飞20 小时前
从程序员到架构师:6大编程范式全解析与实践对比
设计模式·系统架构·编程范式
九狼21 小时前
Flutter + Riverpod +MVI 架构下的现代状态管理
设计模式
静水流深_沧海一粟2 天前
04 | 别再写几十个参数的构造函数了——建造者模式
设计模式
StarkCoder2 天前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命
设计模式
阿星AI工作室2 天前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!
前端·人工智能·设计模式
_哆啦A梦3 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)
前端·设计模式·vibecoding
阿闽ooo6 天前
中介者模式打造多人聊天室系统
c++·设计模式·中介者模式
小米4966 天前
js设计模式 --- 工厂模式
设计模式
逆境不可逃6 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式