问题标签 [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.
design-patterns - 访问者模式和递归
在递归场景中使用访问者模式有什么优势吗?如果是这样,您可以以编程方式演示它吗?
design-patterns - OCaml 中的访问者设计模式
我正在尝试使用 OCaml 的 OO 构造和类型系统来实现访问者设计模式,并且在实例化元素时遇到了问题。
我在编译时遇到的错误是:
但是,代码编译减去实例化salesman
.
如何salesman
在保持类功能的同时实例化?
通过调用 receiveEvaluation 收到编辑错误:
第二种对象类型没有方法visitAccountant
。
java - java中的访问者模式实现-这看起来如何?
Alrite,我将直接跳到代码:
这是一个基本实现:
你会明白为什么我在这里做了一个空的实现......我现在要写一个验证器......它扩展了 StoreValidator
现在这是可访问的样子:
我可以在 Store 对象列表上执行类似操作的代码:
同样,您将拥有 ABCValidator,它将为其他方法(visitCountry / visitSomethinElse)提供实现,并且它将从 StoreValidator 扩展。我会有另一种类型的对象(不是存储)定义接受方法。
I do see a problem here... Say, I need a FileValidator which is different from StoreValidator, I would expect it to have none of these business related validations such as visitInventory(), etc. But, by having a single interface Visitor, I would endup declaring all kinds of methods in Visitor interface. Is that correct? Is this how you do it?
I don't know if I got the pattern wrong, or if I am making any sense. Please share your thoughts.
oop - 访问者模式的替代方案?
我正在寻找访问者模式的替代方案。让我只关注模式的几个相关方面,同时跳过不重要的细节。我将使用 Shape 示例(对不起!):
- 您有一个实现 IShape 接口的对象层次结构
- 您有许多要对层次结构中的所有对象执行的全局操作,例如 Draw、WriteToXml 等...
- 直接潜入并将 Draw() 和 WriteToXml() 方法添加到 IShape 接口是很诱人的。这不一定是好事 - 每当您希望添加要对所有形状执行的新操作时,都必须更改每个 IShape 派生类
- 为每个操作实现一个访问者,即一个 Draw 访问者或一个 WirteToXml 访问者,将该操作的所有代码封装在一个类中。然后添加一个新操作就是创建一个新的访问者类,该类对所有类型的 IShape 执行操作
- 当您需要添加一个新的 IShape 派生类时,您基本上遇到了与 3 中相同的问题 - 必须更改所有访问者类以添加一个方法来处理新的 IShape 派生类型
您阅读访问者模式的大多数地方都指出,第 5 点几乎是该模式工作的主要标准,我完全同意。如果 IShape 派生类的数量是固定的,那么这可能是一种非常优雅的方法。
因此,问题在于添加新的 IShape 派生类时 - 每个访问者实现都需要添加一个新方法来处理该类。这充其量是令人不快的,最坏的情况是不可能的,并且表明这种模式并不是真正设计用于应对此类变化。
所以,问题是有没有人遇到过处理这种情况的替代方法?
c++ - 提升图形库和访问者
我正在编写一个用于操作债券图的库,并且我正在使用 Boost Graph Library 为我存储数据。不幸的是,我似乎无法弄清楚如何使用它来实现适当的访问者模式,因为您不能子类化顶点 - 您必须改为依赖“属性”。库中提供的访问者框架似乎非常适合使用某些算法,其中顶点都是相同类型,但存储不同的信息。在我的问题中,顶点具有不同类型并存储不同类型的信息 - 一些顶点是电阻器,而有些是电容器等。我该如何编写基于顶点属性而不是工作的访问者模式顶点本身?
到目前为止,我唯一的想法是编写一个小类来表示一个对象的类型,该对象指向我需要获取图形信息的原始顶点。然而,这似乎很笨拙,而且不好用。
oop - 访问者模式反对条件?
我似乎没有在访问者模式的使用场景中找到这一点(或者我可能不明白)。它也不是分层的。
让我们使用一个身份验证示例。UserAuthenticator 对用户提供的凭据进行身份验证。它返回一个结果对象。结果对象包含身份验证的结果:身份验证成功,未成功,因为未找到用户名,未成功,因为使用了非法字符等。客户端代码可能会求助于条件来处理此问题。在伪代码中:
访客模式适合这里吗?:
Authresult 然后根据结果调用 AuthVisitor 上的方法:
c# - 使用 ANTLR 构建自己的 C# 编译器:编译单元
我可以用 compiler_unit_return 类型的 x 做什么来提取它的根、它的类、它的方法等?我必须将其适配器提取出来吗?我怎么做?请注意,compile_unit_return 在我的 CSParser(由 ANTLR 自动生成)中是这样定义的:
但是我得到的树是对象类型。我使用调试器运行,似乎看到它属于 BaseTree 类型。但是BaseTree是一个接口!我不知道它与 BaseTree 有什么关系,也不知道如何从这棵树中提取细节。
我需要编写一个访问者,它访问了它的类、方法、变量等。 ParserRuleReturn 类从 RuleReturnScope 扩展并有一个开始和停止对象,我不知道它是什么。
此外,ANTLR 提供的 TreeVisitor 类看起来令人困惑。它需要一个适配器作为参数传递给它的构造函数(如果没有,它将使用默认的 CommonTreeAdaptor),这就是为什么我询问如何获取适配器早期的原因。还有其他问题。API可以参考http://www.antlr.org/api/CSharp/annotated.html
objective-c - Objective-C 类别 == 访问者模式?
你会说 Objective-C 类别是访问者设计模式的实现吗?
uniqueidentifier - 如何确保访问者是唯一的
假设您有一个付费网站,其中包含一些在线课程。而且您要确保一个人不只是购买访问权限,然后将用户名和密码提供给他的所有朋友,这样他们就可以免费参加课程。
你会怎么做?
到目前为止我们想到的:
- 知识产权追踪
- 每个条目的短信密码
- 每门课程的最大跑步次数
还有其他建议吗?
java - Eclipse 中的 ASTVisitor
我正在学习如何为一个项目做一个 ASTVisitor,所以我开始使用 Eclipse,它有一个全面的 API。
我已经从这个网站下载了打包的示例项目:http: //www.eclipse.org/articles/article.php? file=Article-JavaCodeManipulation_AST/index.html
但我意识到代码没有 main() 方法,但我能够运行程序!有谁知道为什么?[问号 1]
然而,这些代码似乎过于编译而无法使用,并且做一些基本操作的说明也不是很清楚。
所以我也继续看这个: http ://www.vogella.de/articles/EclipsePreferences/article.html
任何人都知道如何编写一个主要方法来调用执行(ExecutionEvent 事件)?-- 提供一个示例代码片段?[qn 2] 我不知道如何使用 ExecutionEvent...
我不断收到“线程“主”java.lang.IllegalStateException 中的异常:工作区已关闭。” 即使我删除了执行事件的参数(也需要删除扩展部分)或在我的 main.js 中使用部分代码。似乎与IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot()
. 有谁知道为什么?[问号 3]