【发布时间】:2018-04-13 17:45:43
【问题描述】:
我在大学有这样一个任务来写一个访问者,它计算 AbstractTree 深度。这是树:
public abstract class AbstractTree {
public abstract void Accept(AbstractVisitor abstractVisitor);
}
public class Leaf : AbstractTree {
public override void Accept(AbstractVisitor visitor) {
visitor.VisitLeaf(this);
}
}
public class Node : AbstractTree {
private AbstractTree Left { get; set; }
private AbstractTree Right { get; set; }
public Node(AbstractTree left, AbstractTree right) {
Left = left;
Right = right;
}
public override void Accept(AbstractVisitor visitor) {
visitor.VisitNode(this);
if (Left != null)
Left.Accept(visitor);
if (Right != null)
Right.Accept(visitor);
}
}
还有 AbstractVisitor:
public abstract class AbstractVisitor {
public abstract void VisitLeaf(Leaf tree);
public abstract void VisitNode(Node tree);
}
但是我该如何编写具体的 DepthVisitor 呢?当访问者知道树结构时,我知道如何执行此任务(depth-computing visitor that knows about the tree structure),但在这种情况下,访问者几乎不了解树结构(必须这样做,任务是这样制定的)。
【问题讨论】:
标签: design-patterns visitor-pattern