访问者模式 📅 发布时间:2026/7/12 8:06:20 👁️ 浏览次数: 分派单分派 single dispatch只根据接收者对象的实际类型决定只根据一个维度去决定调用哪个方法就是单分派双分派 double dispatch根据两个对象的类型决定行为,比如行为f(订单类型,操作类型)不同的订单类型比如普通订单或者国际订单不同的操作类型比如计算价格计算税费生成发票这些订单类型和操作类型组合起来执行的方法都是不同的 普通的多态做不到在java中可以使用访问者模式…模拟双分派访问者模式Visitor Pattern : 一种行为型的设计模式把数据结构和作用于数据结构的操作,分离开来就是可以处理不同的数据 可以对每一种数据指定不同的处理模式适用于数据结构长期不变或者变化很小需要扩展操作的如果不用访问者模式每一次的扩展都要去修改接口如果用访问者模式,直接实现一个访问者的操作类就好了例子 对相同的数据处理为不同的文件pdftxthtmlpublicinterfaceItem{// 每个元素接收访问者voidaccept(Visitorvisitor);}publicinterfaceVisitor{voidvisit(ConcreteItempdfElement);}实体对象AllArgsConstructorNoArgsConstructorDatapublicclassConcreteItemimplementsItem{privateStringcontent;Overridepublicvoidaccept(Visitorvisitor){visitor.visit(this);}}访问者publicclassPdfVisitorimplementsVisitor{Overridepublicvoidvisit(ConcreteItempdfElement){// 把每个Item都做pdf处理StringcontentpdfElement.getContent();System.out.println(content被转换成了pdf....);}}publicclassTxtVisitorimplementsVisitor{Overridepublicvoidvisit(ConcreteItempdfElement){System.out.println(pdfElement.getContent()转换成了 txt...);}}测试publicclassDemo{publicstaticvoidmain(String[]args){ConcreteItemconcreteItemnewConcreteItem(waterkid);PdfVisitorpdfVisitornewPdfVisitor();TxtVisitortxtVisitornewTxtVisitor();concreteItem.accept(pdfVisitor);concreteItem.accept(txtVisitor);}}订单系统复杂一点的订单系统比如订单类型有很多种(普通订单/优惠订单/国际订单)这种订单的类型非常稳定几年都不会更改但是会不断新增 对订单的操作计算价格计算税费生成发票导出报表统计销售数据风控校验序列化导出生成物流信息等并且未来还会继续追加不同的访问者就可以使用访问者模式公众号
高效论文写作:7款AI工具排名与核心技巧解析。 论文季又双叒叕来了!你是不是还在为选题头秃、为文献焦虑、为格式崩溃?别慌!2025年AI论文工具已经进化到让你惊艳的程度!经过实测上百篇论文和深度对比分析,我整理了这份全网最实用的7款AI写论文网站技巧排名ÿ… 2026/7/12 1:01:19
AI能10分钟完成你一个月工作?技术人转型“模型构建者“的必修课 “技术的爆发从来不是线性演进,而是在临界点处瞬间重构世界。”——凯文凯利 🧠 当AI能10分钟完成你一个月的工作,你的价值在哪里? 💡 核心观点:AI没有改变洞察的本质,但彻底改变了洞察的方式 “… 2026/7/11 2:29:28
Gemini 3.1 Pro 大幅升级:复杂任务处理能力飙升,小白程序员必备,速收藏! 谷歌刚在 2026 年 2 月 19 日发布了 Gemini 3.1 Pro。 💡 核心要点速览: • 复杂任务大幅升级:ARC-AGI-2、Aider 等各项硬核跑分全面提升。• 真能“干活”的模型:发布会演示了从代码生成 SVG 动画、接入实时数据做仪表盘到 3D 交… 2026/7/10 22:34:58
基于STM32和H桥的高效直流有刷电机驱动方案 1. 项目背景与核心器件选型在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,仍然是许多应用场景的首选驱动方案。然而传统驱动电路存在效率低、体积大、保护功能薄弱等问题。我们基于东芝半导体的TC78H651AFNG H桥驱动器… 2026/7/12 8:06:12
3类白噪音环境音效对比:如何为 Lofi 音乐构建“独立空间”错觉 3类白噪音环境音效对比:如何为 Lofi 音乐构建“独立空间”错觉在数字时代的信息洪流中,Lofi音乐以其独特的"低保真美学"成为都市人群的精神避风港。这种音乐类型最迷人的特质,莫过于它能通过精心设计的声学元素,为听众营… 2026/7/12 8:04:11
英雄联盟智能助手:数据驱动的游戏决策优化工具 英雄联盟智能助手:数据驱动的游戏决策优化工具 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的对局中,信息优势往往决定了游戏的胜负走向。Seraphine是一款基于官方LCU AP… 2026/7/12 8:04:11
Picsum 与 Unsplash API 对比评测:3大维度解析免费图片服务选型 Picsum 与 Unsplash API 深度对比:开发者如何选择最佳免费图片服务在当今数字化时代,高质量的图片资源对于网站和应用开发至关重要。无论是原型设计、内容填充还是产品展示,开发者都需要可靠、高效的图片服务。Picsum和Unsplash作为两大知名免… 2026/7/12 8:00:11
锂离子电池组主动电压平衡方案设计与实现 1. 项目背景与核心需求在锂离子电池组应用中,电压平衡(Voltage Balancing)是确保电池组安全性和使用寿命的关键技术。当多个电池串联使用时,由于制造工艺差异、温度分布不均等因素,各单体电池的电压会出现不一致现象。… 2026/7/12 7:58:10
UE5材质进阶:基于顶点色与HeightLerp实现物理真实的苔藓生长效果 1. 项目概述与核心思路 最近在做一个中世纪风格的游戏场景,需要给那些斑驳的砖墙加上苔藓效果。一开始,我尝试了最直接的方法:在材质里用一个简单的Lerp节点,把苔藓材质和砖墙材质混合,然后用一张噪声贴图来控制混合遮… 2026/7/12 7:56:10
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14