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

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

问题一:访问者模式(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

相关文章
|
存储 编解码 算法
MRI多任务技术及应用
MRI多任务技术及应用
|
SQL 安全 前端开发
xiaodisec day017
学习了PHP框架,重点讨论了ThinkPHP、Yii和Laravel。ThinkPHP5的URL结构为域名/.php/模块/控制器/方法。MVC模式用于框架开发。注意3.x版本的地址格式。讨论了命名空间和SQL注入,框架能提供内部过滤。审计了多个使用ThinkPHP的CMS,如EyouCMS、Fastadmin等,并提到了ZoomEye和Seebug作为搜索漏洞的工具。通过黑盒测试和报错信息可识别框架版本,如Fastadmin和YFCMF。还提到了ThinkPHP的rec漏洞及修复方法。
|
机器学习/深度学习 存储 边缘计算
转:排列组合公式算法在局域网监控软件中的技术趋势与未来发展
排列组合公式是组合数学中的一种计算方法,用于确定给定集合中元素的不同排列和组合的数量。在局域网监控软件中,排列组合公式可以应用于一些特定的场景,如网络中的用户组合、权限管理、资源分配等方面。
159 0
|
弹性计算 运维 负载均衡
十张图带你了解负载均衡
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820… 种一棵树最好的时间是十年前,其次是现在
402 0
|
存储 缓存 监控
聊聊Redis的数据热点问题
一起聊聊什么是Redis热点?Redis热点问题为什么会极大地影响整个集群的性能?如何避免Redis数据热点?热点问题如何排查?热点问题如何解决?
333 0
聊聊Redis的数据热点问题
|
移动开发 前端开发 小程序
Canvas 2D详解
Canvas 2D详解
Canvas 2D详解
|
存储 安全
Java-Map实现类
HashMap是 Map 接口使用频率最高的实现类。
160 0
|
Dart
Dart入门—集合类型
<div class="markdown_views"> <h1 id="dart入门集合类型">Dart入门—集合类型</h1> <p>Dart核心库提供了List(列表)、Map(映射)、Set(集)三种集合类型</p> <h2 id="列表list">列表(List)</h2> <p>固定长度的列表,一旦定义就无法改变长度</p> <pre class="
1666 0
|
Java 应用服务中间件