Questions tagged «visitor-pattern»

3
为抽象语法树实现访问者模式
我正在创建自己的编程语言,出于学习目的。我已经为我的语言的一部分编写了词法分析器和递归下降解析器(我目前支持数学表达式,例如+ - * /和括号)。解析器将我交给一个抽象语法树,在该语法树上我调用该Evaluate方法以获取表达式的结果。一切正常。这大约是我目前的情况(C#代码示例,尽管这在很大程度上与语言无关): public abstract class Node { public abstract Double Evaluate(); } public class OperationNode : Node { public Node Left { get; set; } private String Operator { get; set; } private Node Right { get; set; } public Double Evaluate() { if (Operator == "+") return …

1
在大型对象层次结构中使用访问者模式
语境 我一直在使用对象层次结构(一个表达式树)使用“伪”访问者模式(伪,因为它不使用双调度): public interface MyInterface { void Accept(SomeClass operationClass); } public class MyImpl : MyInterface { public void Accept(SomeClass operationClass) { operationClass.DoSomething(); operationClass.DoSomethingElse(); // ... and so on ... } } 由于MyInterface的实现数量很多(约50个或更多),而且我不需要添加额外的操作,因此该设计非常舒适。 每个实现都是唯一的(它是一个不同的表达式或运算符),而某些实现是组合的(即,将包含其他运算符/叶节点的运算符节点)。 遍历当前是通过在树的根节点上调用Accept操作来执行的,后者依次在其每个子节点上调用Accept,依次类推...依次类推... 但是现在是时候需要添加一个新操作了,例如漂亮的打印: public class MyImpl : MyInterface { // Property does not come from MyInterface public string …

4
访客模式在这种情况下有效吗?
我任务的目标是设计一个可以运行计划的定期任务的小型系统。重复执行的任务类似于“星期一至星期五,从上午8:00到下午5:00,每小时发送一封电子邮件给管理员”。 我有一个名为RecurringTask的基类。 public abstract class RecurringTask{ // I've already figured out this part public bool isOccuring(DateTime dateTime){ // implementation } // run the task public abstract void Run(){ } } 我有几个从RecurringTask继承的类。其中之一称为SendEmailTask。 public class SendEmailTask : RecurringTask{ private Email email; public SendEmailTask(Email email){ this.email = email; } public override void Run(){ …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.