访问者模式问题之在软件工程中,根据特性和场景决定是采用面向对象的抽象还是访问者的抽象,如何实现

简介: 访问者模式问题之在软件工程中,根据特性和场景决定是采用面向对象的抽象还是访问者的抽象,如何实现

问题一:访问者模式(Visitor)的命名和它的实现方式之间有何关系?


访问者模式(Visitor)的命名和它的实现方式之间有何关系?


参考回答:

虽然“Visitor”这个名字看起来像是一个名词,但在实现中,它通常代表了一系列关于操作的抽象。从模式匹配和ASM等框架的实现中可以看出,访问者被用作一个个小操作的抽象,并通过排列组合形成更复杂的操作。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672359



问题二:面向对象和函数式编程在访问者模式中的体现有何不同?


面向对象和函数式编程在访问者模式中的体现有何不同?


参考回答:

面向对象的方式认为操作必须和数据绑定到一起,即作为每个类的成员方法存在。而函数式编程则倾向于将数据和操作分离,将基本操作进行排列组合成为更加复杂的操作。在访问者模式中,一个访问者的实现就对应了一个操作,这体现了函数式编程的思想。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672360



问题三:在需要给每个类增加一个新操作时,成员函数实现方式和访问者实现方式有何区别?


在需要给每个类增加一个新操作时,成员函数实现方式和访问者实现方式有何区别?


参考回答:

成员函数实现方式需要给类层级结构的每个类增加一个实现,这需要修改原来的代码,不符合开闭原则。而访问者实现方式则只需新建一个访问者,完全不影响原来的代码,因此在这种情况下,访问者实现方式更优。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672361



问题四:在类层级结构中增加一个新类时,成员函数实现方式和访问者实现方式又有何不同?


在类层级结构中增加一个新类时,成员函数实现方式和访问者实现方式又有何不同?


参考回答:

在类层级结构中增加一个新类时,成员函数实现方式只需新建一个类即可,完全不影响原来的代码。而访问者实现方式则需要给每个访问者增加新类的代码实现,这同样需要修改原来的代码,不符合开闭原则。因此,在这种情况下,成员函数实现方式更优。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672362



问题五:阿里双十一的分会场与功能系统划分中,按应用划分和按功能划分各有什么优缺点?


阿里双十一的分会场与功能系统划分中,按应用划分和按功能划分各有什么优缺点?


参考回答:

按应用划分(如盒马、饿了么、聚划算完全独立)能够短平快地支撑创新业务,但可能导致重复造轮子。这种划分方式类似于面向对象中将操作和数据绑定在一起的方式,每个系统都实现了自己的功能点。而按功能划分(如优惠券系统、订单系统、支付系统)能够最大程度上重用已有技术成果,但中台的限制可能会遏制创新业务的发展。这种划分方式类似于访问者模式,将操作抽象出来,通过不同的访问者实现不同的功能。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672363



问题六:在软件工程中,如何根据特性和场景决定是采用面向对象的抽象还是访问者的抽象?


在软件工程中,如何根据特性和场景决定是采用面向对象的抽象还是访问者的抽象?


参考回答:

软件工程中没有银弹,需要根据特性和场景来决定是采用面向对象的抽象还是访问者的抽象。通常,部分核心方法可以作为对象的成员方法存在,以利用面向对象的多态和封装特性。而对于应用层那些琐碎杂乱的需求,则可以使用访问者模式来实现,以便在不修改原有类结构的情况下增加新的操作。更多时候,两者需要混用,以达到最佳的软件设计效果。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/672364

相关文章
|
存储 缓存 安全
【服务器开发系列】订单号生成策略
订单是整个电子商务的核心,整个电子商务的流程也是围绕订单展开的;本文与大家分享一下各大电子商务网站订单号的生成方式。
1471 0
|
4月前
|
存储 弹性计算 Linux
阿里云轻量应用服务器实例规格详解:vCPU、内存、系统盘、峰值带宽、线路类型及固定IP地址全解析
2026年阿里云轻量应用服务器全新升级,支持200M峰值带宽、不限流量,涵盖vCPU、内存、系统盘、公网IP等全配置解析,适用于个人与企业建站、开发测试等多种场景,详情请见官方页面。
|
4月前
|
人工智能 自然语言处理 运维
构建AI智能体:一百、AI模型选择与部署考量:从业务需求到实际落地的思考决策
本文系统介绍了AI模型生态分类与选型方法论。主要内容包括:1)AI模型分类体系,分为通用大语言模型、文本嵌入模型和专业领域模型三大类;2)业务需求分析方法,从功能、性能、用户体验等维度进行需求拆解;3)模型选型决策框架,基于参数量、序列长度等指标建立四阶段评估流程;4)典型场景的模型选择建议,如智能客服推荐中等规模对话模型,内容创作选择大模型等。文章强调模型选择需平衡业务需求、技术指标和资源约束,并提供了代码示例说明不同模型的使用方法。最终指出没有最优模型,只有最适合特定场景的模型选择方案。
643 17
|
10月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
304 2
|
9月前
|
存储 SQL 人工智能
阿里云ODPS 使用实践的深度总结
本内容深入解析ODPS在大数据实践中的核心价值与挑战,涵盖分布式架构、流批一体、成本控制等关键技术,结合制造业、营销等场景案例,展示从数据治理到智能决策的跃迁路径,并展望未来边缘协同、AI平民化等前沿方向。
450 0
|
9月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
10月前
|
人工智能 数据可视化 安全
提升效率的秘密武器:10款最佳会议纪要与任务衔接工具推荐
【企业会议纪要落地难题及解决方案】 当前企业普遍面临会议纪要执行难的问题:1)会议记录与任务执行脱节,手动转化效率低;2)责任分配不清导致重复沟通;3)缺乏追踪机制造成任务拖延。针对这些痛点,市场上涌现出10款专业工具(如飞书、Teambition等),通过智能记录、任务自动转化、进度追踪等功能实现;会议-执行"闭环管理。选型需考虑场景适配、系统对接和易用性,建议配合五步流程(模板制定-任务指派-自动提醒-定期复盘)使用。这类工具不仅能提升30%以上执行效率,更能帮助企业建立;
883 2
|
10月前
|
人工智能 自然语言处理 文字识别
快手封号多久能恢复正常?
快手账号封禁恢复全流程技术解析
|
11月前
|
存储 编译器 程序员
c语言的文件操作与文件缓冲区
如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。磁盘(硬盘)上的文件是文件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序文件、数据文件(从文件功能的角度来分类 的)。就比如说我们电脑中以.txt为后缀的就是文件的一种,他就是数据文件。.exe为后缀的就为程序文件。函数名功能适用范围fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets。
390 0
|
机器学习/深度学习 人工智能 自然语言处理
以史为鉴,未雨绸缪:身处“大模型掀起的AI浪潮中”的感悟和思考
以史为鉴,未雨绸缪:身处“大模型掀起的AI浪潮中”的感悟和思考