问题标签 [visitor-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
15331 浏览

oop - 翻译模式

在之前的工作中,我的经理建议使用 Translator 模式将数据从 DataTable 转换为对象。基本上,Translator 类只有静态(即类)方法,因此它是函数调用的集合。我最初的方法是为每个可以将 DataTable 行作为参数并创建与数据对应的实例的对象实现构造函数。

他说 Translator 类是 Microsoft 提出的,它提供了更好的代码模块化。我可以看到这一点,但同时它似乎是一种非常非 OO 的方法(尽管访问者模式具有相似的特征)。

你们中有人用过这种模式吗,你怎么看?优点和缺点?

0 投票
1 回答
578 浏览

google-analytics - 关于谷歌分析的问题

以下代码用于在 Google Analytics 上检索用户帐户。我的问题是要替换什么而不是代码ga:AccountName,并ga:ProfileId在下面的代码中找到在网站上登录的访问者。

0 投票
1 回答
11090 浏览

java - Java Enums - Switch 语句与 Enums 上的访问者模式 - 性能优势?

我一直在寻找几天来找到这个基于性能的问题的答案。
到目前为止,在挖掘 Internet 之后,我了解到有几种方法可以在 java 中使用枚举,这里有很好的记录。好吧,作为初学者,肯定会喜欢在switch-case语句中使用 Enums,它可以提供清晰的代码并更好地理解代码。但另一方面,我们也有 Enums 的访问者模式样式实现,它确保了类型安全性和可扩展性,在此处讨论。

话虽如此,回到这个问题背后的原始想法,到目前为止,我已经了解到,如果使用 Enums 正确设计了 switch-case 构造,则可以确保 case 值不是稀疏的,并且 Enum 声明是相同的作为 switch-case 语句的编译单元,java 编译器通过实现诸如跳转表之类的结构对生成的字节码进行一些优化(在此处和其他地方以及 Sun 的网站上进行了讨论,我失去了链接)。现在,与多重/嵌套 if-else 构造相比,这肯定会提高性能。

我的问题是,java 如何在生成的字节码中实现基于访问者模式的 Enums 实现,与基于switch-case的实现相比,性能提升是多少(如果有的话)?

考虑到我的枚举将来可能会增长,而且我也热衷于性能,我应该更喜欢哪种类型的实现。目前,我的枚举中有一些 19 和奇数的常量。


编辑
我有一个类存储有关游戏变量的一些信息。其中一个变量是Enum类型。

}

后来我意识到将信息与逻辑分离,因此创建了另一个类并将Enum ShapeGameObject移动到这个新类GraphicModel,而不是在那里有switch-case,我实现了特定于常量的方法。是的,在此修改之后,我确实在任一类中放置了正确的导入语句。

后来我什至根据这里建议的访问者模式实现了这个

那么,我需要知道的是哪种实施方式更有效?当然,要在编译时将switch-case转换为跳转表,java 需要在同一编译单元中同时使用枚举声明和switch语句。我应该在我的GraphicModel类中使用基于开关的实现还是特定于常量的方法实现?相反,要清楚,性能有什么区别?

0 投票
1 回答
411 浏览

c++ - Objective-C++ 内存问题

我有记忆问题。

我有一个 C++ 库(来自 Eyescale 的均衡器),他们使用 Traversal Visitor Pattern 允许您向他们的类添加新功能。

我终于弄清楚了它是如何工作的,并且我有一个仅返回其中一个对象的属性的访问者。(因为我不知道它们是如何分配的)。

所以。

我的小代码是这样做的:

所以这就是问题所在。

但是如果我这样做:

// 一个真实的内存位置,并设置 w 在 XCode 的调试器窗口中验证。

它对 osw 做同样的事情。

我不明白。为什么某些东西在(gdb)中起作用但在代码中不起作用?

该文件完全是一个 cpp 文件,但它似乎在 objc++ 中运行,因为我需要关闭阻塞。

帮助!?我觉得我在这里缺少一些内存管理基本的东西,无论是使用 C++ 还是 Obj-C。

[编辑]

channel->getWindow() 应该这样做:

如果我从仅 C++ 的应用程序运行该代码,它也可以正常执行。

[编辑]

不...我尝试创建一个简单的独立程序,因为我厌倦了将它作为插件运行。调试很麻烦。

不,它也不能在 C++ 程序中运行。所以我真的不知道我做错了什么。

谢谢,

——斯蒂芬·弗拉尼

0 投票
4 回答
3289 浏览

delphi - Delphi Enterprise:如何在没有循环引用的情况下应用访问者模式?

使用 Delphi 2009 Enterprise,我在模型视图中为 GoF 访问者模式创建了代码,并将代码分成两个单元:一个用于域模型类,一个用于访问者(因为我可能需要其他单元来实现不同的访问者,所有内容都在一个单位?前面有“大泥球”!)。

以及商业模式课程的第二单元

看到问题了吗?循环单位参考。有没有优雅的解决方案?我想它需要“n+1”个带有基本接口/基类定义的附加单元来避免 CR 问题,以及硬转换之类的技巧?

0 投票
3 回答
22214 浏览

python - 如何用 Python 编写抽象语法树的访问者模式?

我的同事建议我编写一个访问者模式来导航 AST。谁能告诉我更多我将如何开始写它?

据我了解,AST 中的每个节点都有visit()方法(?),它会以某种方式被调用(从哪里?)。我的理解到此结束。

为了简化一切,假设我有节点RootExpressionNumberOp并且树看起来像这样:

谁能想到访问者模式将如何访问这棵树以产生输出:

谢谢,博达赛多。

0 投票
7 回答
1211 浏览

c++ - C ++访问者模式处理模板化字符串类型?

我正在尝试使用访问者模式来序列化对象的内容。然而,我遇到的一个障碍是当我访问字符串时。我的字符串是模板类型,类似于 STL 的 basic_string。所以像:

因为我可以有很多不同的模板化字符串类型,所以我不能将它们添加到我的访问者界面中。这将是荒谬的。但我无法将模板添加到我的 VisitString 方法,因为 C++ 阻止在虚拟方法中使用模板参数。

那么我有什么选择来解决这个问题?

编辑:我添加了一些基本代码

0 投票
6 回答
38470 浏览

java - 访问者模式的目的与示例

我真的对访问者模式及其用途感到困惑。我似乎无法想象使用这种模式的好处或其目的。如果有人可以在可能的情况下举例说明,那就太好了。

0 投票
3 回答
269 浏览

c++ - 使用访客时更改容器

我使用类似 STL 的迭代器在 C++ 中实现了访问者模式,用于存储访问者在容器中的当前位置。现在我想在迭代容器时更改容器,我对从容器中删除项目特别感兴趣,即使是我目前正在访问的项目。

现在显然这将使访客内部迭代器无效,因为它正好指向这个项目。目前,我将所有迭代器的列表存储在容器中并更新它们,只要将任何内容添加到列表中或从列表中删除。所以在某种程度上,这类似于应用于迭代器(作为 Observer)和列表(作为 Observable)的观察者模式。

或者,我考虑让 visitor() 方法向访问者返回一些关于当前项目发生了什么以及如何进行迭代的提示,但这听起来也不是一个好主意,因为 visit() 实现不应该真的很关心找到下一个项目。

所以,我的问题是:让访客继续工作的最佳方式是什么,即使物品被添加到容器中或从容器中移除。

问候,弗洛里安

更新:有一个访问者在容器上运行,但在 visit() 方法内部,可以在同一个容器上使用任意数量的附加迭代器。我希望访问者继续使用容器中的剩余项目,即使我们从调用 visit() 中返回,其中容器中的任何项目都被删除了。

0 投票
1 回答
782 浏览

javascript - 跟踪网站访问者的浏览习惯

第一次使用这个服务的问题。我希望我不是在问已经回答的问题。我试图通过搜索引擎找到我的问题的答案,但我无法。

我的问题如下:

使用 php、javascript 或其他任何东西,我是否可以跟踪我的用户如何查看我的博客/网站上的页面?具体来说,我想跟踪用户浏览器在同一页面上阅读我的内容的特定部分所花费的时间。

例如,它会回答以下问题:有人花了多少时间阅读我的文章的介绍与结论?(位于同一页面上)

基本上,通过查看浏览器当前向下滚动页面的位置来跟踪网络访问者的“眼睛”。

如果我有点菜鸟,我很抱歉!感谢您对我的问题的任何帮助,您可以提供给我!^_^