网站首页 > 博客文章 正文
结构
面向对象中封装的想法是将数据和操作数据的方法集中在一个类中,以达到高内聚低耦合的效果。但是有时也会希望将目的相关或相同的针对不同类型的操作集中到一个类中。这种方式就是访问者模式,它的结构如下:
上图引用自《设计模式》一书
访问者类Visitor定义两个不同的接口分别用于访问构造图下半部分的两个Element的派生类。访问者类Visitor通过不同的方法决定它的派生类可以访问的对象类型。
具象访问者类ConcreteVisitor类负责具体实现一组针对访问者类指定的对象的具体操作。每个访问方法往往是某个更大算法的一部分,所以经常会需要使用具象访问者类的数据成员来保存这个算法的信息。由于需求的不同,并不要求每个具象类都必须实现所有的访问方法。
元素类Element作为要素类的基类,首先应该有自己的功能,然后才是为继承层次上的具象要素类定义用来接纳访问者类的accpet方法。也可以定义一个只有accept方法的抽象类,但是个人觉得这多少有些本末倒置的感觉。要素类的类结构还是应该按照其本身的需求进行设计,而不是为了访问者模式这么一个实现层面的便利而改变。
具象要素类ConcreteElement作为访问者的访问对象,负责招待访问者。在它的accept方法中会调用Visitor的对应方法。这个过程可以看作是将具象Visitor类和访问对象放到一起之后,访问对象和Visitor的访问方法之间实现自动匹配。这也可以认为是一种重载,是访问者模式最为神奇的地方。
对象结构ObjectStructure只是一个提法,并不存在这么个类。之所以需要这个角色,个人觉得可以这样理解:对某个数据结构进行的处理总可以看作是数据结构遍历和处理数据的结合。Visitor类只负责处理,那么就需要某个角色来推进遍历动作,而这个角色就是ObjectStructrue。由于在整个遍历、处理的过程中Visitor始终处于被动地位,因此也就不在乎ObjectStructure具体是什么结构了。而这个不在乎正是面向对象中的解耦合。
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】,轻松学习每一天!
向对象设计,面向对象编程,面向对象思考!
猜你喜欢
- 2024-10-01 设计模式——备忘录模式(备忘录界面设计)
- 2024-10-01 设计模式 之 行为型模式(行为型设计模式特点)
- 2024-10-01 Go语言设计模式-访问者(go语言有设计模式吗)
- 2024-10-01 Spring Boot 实战:运用访问者模式灵活扩展订单处理逻辑
- 2024-10-01 visitor pattern 访问者模式(访问者模式工作原理)
- 2024-10-01 Aha!设计模式(105)-访问者模式(1)
- 2024-10-01 GOF设计模式(命令模式,访问者模式,迭代器模式,观察者模式)
- 2024-10-01 设计模式第2招第9式之解释器模式(解释器原理)
- 2024-10-01 设计模式第2招第1式之观察者模式(观察者设计模式的优点)
- 2024-10-01 「编程设计」访问者(Visitor)模式-补丁式为原体系增加新功能
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)