首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当添加新的数据类型时,访问者模式是否阻止了修改现有代码的需要?

当添加新的数据类型时,访问者模式是否阻止了修改现有代码的需要?
EN

Software Engineering用户
提问于 2020-01-09 18:26:56
回答 1查看 495关注 0票数 2

据我所知,访问者模式应该解决表达式问题(描述为这里),其中一个程序需要支持在多个类型上执行多个操作,理想情况下允许添加新操作和新类型,而不涉及现有代码。

  • OOP语言可以为每种对象类型的操作定义一个方法;这使得在不修改现有代码的情况下很容易添加新对象,但是添加新操作需要修改所有现有对象。
  • 模式匹配的FP语言有相反的问题;添加一个新的操作是自成一体的,但是添加一个新的数据类型需要修改所有现有的函数来支持新的类型。

据我所知,访问者模式只是将OOP样式更改为FP样式;添加新操作只意味着添加新类型的访问者,但添加新数据类型意味着向所有现有访问者添加一个方法。我的理解正确吗?如果是的话,访问者模式的好处是什么,如果它不能完全解决表达式问题?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2020-01-09 19:48:52

我不确定访客是否解决了“表达问题”。但你的理解是正确的:

  • 您可以根据抽象访问者派生新的访问者。这允许定义对所有已访问元素都有效的新操作。
  • 但是,如果在访问的对象结构中添加一个新类型的元素,则需要更新抽象访问者及其所有具体派生,以便添加一个成员函数来处理新类型的元素。

访问者被设计为在具有子结构的复杂结构上执行操作(通常是在类似树的复合结构上),并且允许添加新的操作而不更改已访问的类。

不相关:我会小心地反对OOP和FP。您有FP语言,允许它们的函数将不可变的对象作为输入,生成对象作为结果,还有OOP语言引入了FP特性,允许实现FP逻辑(如果程序员愿意的话)。

票数 6
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/403584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档