首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用访问者模式和单独的类有什么区别?

问使用访问者模式和单独的类有什么区别?
EN

Stack Overflow用户
提问于 2018-08-29 03:02:57
回答 1查看 211关注 0票数 1

我想知道访问者模式与使用静态方法执行代码分离之间的区别。

让我们来看看一个例子,在这个例子中,我可以调用访问者模式:

代码语言:javascript
复制
  new AnalyticsVisitor.accept(myClass); 

例如,当从myClass调用时,就会将工作转移到访问者中执行。如果内存密集,它甚至会垃圾收集得更快。

现在让我们来看看如何使用一种简单的方法来实现大致相同的目标:

代码语言:javascript
复制
  new AnalyticsManager.execute(myClass);

我也取得了同样的成就吗?

  1. 我有密码分离。
  2. 我可以将它应用到几个数据结构中。
  3. 我可以添加信息到遗留代码,而不改变它。

那么,为什么要使用访问者模式而不是只使用类(除非用于双重分派)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-29 06:25:17

这个问题还有点困惑。我怀疑你还没有理解访客模式的目标。

As discussed here访问者模式在具有相对稳定的复杂数据结构(如解析树)时非常有用(就开发而言),但是您希望能够继续对其所有元素添加新的操作。这是笨拙的标准OO技术。

访问者模式所基于的技术是双重调度,所以当您说“为什么要使用访问者模式,除非用于双重调度?”你实际上是在说:“为什么要使用访问者模式?”

您的示例代码只包含客户端,因此不清楚您的新技术实际提供了什么。

对于真正的访问者模式,所提供的代码似乎是向后的。它应该是:

代码语言:javascript
复制
my_datastructure.accept(analytics_visitor);

其中,analytics_visitor继承自MyDataStructureVisitor,并为数据结构可以容纳的每个元素类型提供单独的方法。

至于取得的成就:

  1. “代码分离”是一个模糊的术语。访问者模式允许定义数据结构,而无需定义所有操作(假定的方法)。相反,它们可以单独定义--封装成本较低。)
  2. 还不清楚将访问者模式应用于多个数据结构意味着什么。每个访问者类都与一个数据结构相关联。
  3. 目标不是在遗留代码中添加'info‘。它是为遗留代码添加操作。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52068876

复制
相关文章

相似问题

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