假设我有这样的访客
class Visitor : IVisitor
{
void Accept(Visitable v)
{
/// other code
v.AChild.Visit(this);
v.BChild.Visit(this);
}
}
其中 AChild 和 BChild 可以是完全相同的类型,但访问代码需要区分它们(它需要在 AChild 和 BChild 上进行不同的操作)。做这个的最好方式是什么?
- 在访问者中设置状态并在下次调用时检查它
- 将不同的访客传给每个孩子
- 其他?
对不起,我第一次是倒着做的(当前Accept
是Visit
)。它现在匹配Wikipedia 中显示的模式。
所有访问方法如下所示:
void Visit(IVisitor v) { v.Accept(this); }