当前位置: 首页 > news >正文

java 设计模式_行为型_16访问者模式

16.访问者模式

一.什么是访问者模式
封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下,定义作用于这些元素的新操作。

二、角色

  • (1) Vistor(抽象访问者):为该对象结构中具体元素角色声明一个访问操作接口。
  • (2) ConcreteVisitor(具体访问者):每个具体访问者都实现了Vistor中定义的操作。
  • (3) Element(抽象元素):定义了一个accept操作,以Visitor作为参数。
  • (4) ConcreteElement(具体元素):实现了Element中的accept()方法,调用Vistor的访问方法以便完成对一个元素的操作。
  • (5) ObjectStructure(对象结构):可以是组合模式,也可以是集合;能够枚举它包含的元素;提供一个接口,允许Vistor访问它的元素。

三、代码
1、抽象访问者

public interface Tasker {void visitZhuang(ZhuangHero zhuangHero);void visitZhen(ZhenHero zhenHero);
}

2、具体访问者1

public class MyTasker implements Tasker {@Overridepublic void visitZhuang(ZhuangHero zhuangHero) {System.out.println("我访问了庄周,庄周释放技能");zhuangHero.operate();}@Overridepublic void visitZhen(ZhenHero zhenHero) {System.out.println("我访问了甄姬,甄姬释放技能");zhenHero.operate();}
}具体访问者2
public class OtherTasker implements Tasker {@Overridepublic void visitZhuang(ZhuangHero zhuangHero) {System.out.println("其他人访问庄周,庄周开始使出技能");zhuangHero.operate();}@Overridepublic void visitZhen(ZhenHero zhenHero) {System.out.println("其他人访问甄姬,庄周开始使出技能");zhenHero.operate();}
}

3、抽象元素

public abstract class Hero {public abstract void accept(Tasker tasker);
}

4、具体元素(1)

@Data
@NoArgsConstructor
public class ZhenHero extends Hero {@Overridepublic void accept(Tasker tasker) {tasker.visitZhen(this);}public void operate(){System.out.println("甄姬释放出技能");}
}

具体元素(2)

@NoArgsConstructor
@Data
public class ZhuangHero extends Hero {@Overridepublic void accept(Tasker tasker) {tasker.visitZhuang(this);}public void operate(){System.out.println("庄周释放出技能");}
}

5.对象结构

public class ObjectStructure {private List<Hero> heroList = new ArrayList<>();public void handleRequest(Tasker tasker){for (Hero hero : heroList) {hero.accept(tasker);}}public void addHero(Hero hero){heroList.add(hero);}}

6.测试类

public class VisitorTest {public static void main(String[] args) {ObjectStructure objectStructure = new ObjectStructure();Hero zhuangHero = new ZhuangHero();Hero zhenHero = new ZhenHero();objectStructure.addHero(zhuangHero);objectStructure.addHero(zhenHero);Tasker myTasker = new MyTasker();Tasker otherTasker = new OtherTasker();objectStructure.handleRequest(myTasker);objectStructure.handleRequest(otherTasker);}
}

相关文章:

  • 深入解析ArrayList源码:从短链项目实战到底层原理
  • 2025年EAAI SCI1区TOP,贪婪策略粒子群算法GS-IPSO+无人机桥梁巡检覆盖路径规划,深度解析+性能实测
  • 【项目实训#08】HarmonyOS知识图谱前端可视化实现
  • 计算机网络-自顶向下—第一章概述重点复习笔记
  • XMLDecoder、LDAP 注入与修复
  • WebSocket与XMPP:即时通讯技术的本质区别与选择逻辑优雅草卓伊凡|片翼|许贝贝
  • [每周一更]-(第147期):使用 Go 语言实现 JSON Web Token (JWT)
  • 深度学习——基于卷积神经网络的MNIST手写数字识别详解
  • 大规模异步新闻爬虫的分布式实现
  • 【Jmeter】Jmeter 高并发性能压力测试
  • orb_slam--安装配置
  • 混合云战略规划深度解析:多云管理的技术架构与治理框架
  • (题目向,随时更新)动态规划算法专题(2) --见识常见的尝试模型
  • 三维激光雷达在智慧工厂物流测量中的应用分析
  • Pytorch框架——自动微分和反向传播
  • python类成员概要
  • ChatNT-用于DNA、RNA和蛋白质任务的多模态对话代理-文献精读143
  • Unity3D仿星露谷物语开发62之添加NPC角色
  • 嵌入式PADS中元件封装绘制与实现
  • 重复的囚徒困境博弈中应该如何决策?--阿克塞尔罗德竞赛(Axelrod‘s Tournament)实验
  • 大连市那里做网站宣传的好/十大最免费软件排行榜
  • 网站 被攻击_主业篡改 被黑了 织梦做的站/百度自动优化
  • 有没有做网站的/如何进行网站的推广
  • 物流企业网站有哪些/免费推广引流软件
  • 坪山网站建设要多少钱/中囯联通腾迅
  • wordpress怎么搬迁/网站搜索引擎优化的方法