访客模式:来访儿童的责任

时间:2019-06-25 17:35:39

标签: c# visitor-pattern

我对在分层方案中使用访问者模式有一个一般性的问题: 可以说我有一个Visitor和两个类,其中一个嵌套在另一个类中。

是...

  • ...(A)类本身有责任为嵌套项目调用Accept方法吗?
  • ...(B)访客有责任呼叫嵌套商品的访客? 或
  • ...(C)取决于特定的用例。?

(A)

public interface IVisitor
{
    void Visit(Level1 level1);
    void Visit(Level2 level2);
}

public class Level1
{
    public IEnumerable<Level2> Level2Items { get; }

    public void Accept(IVisitor visitor)
    {
        visitor.Visit(this);

        foreach(var i in Level2Items)
            i.Accept(visitor);
    }
}
public class Level2
{
    public void Accept(IVisitor visitor)
    {
        visitor.Visit(this);
    }
}

(B)

public class Level1
{
    public IEnumerable<Level2> Level2Items { get; }

    public void Accept(IVisitor visitor)
    {
        visitor.Visit(this);
    }
}
public class Level2
{
    public void Accept(IVisitor visitor)
    {
        visitor.Visit(this);
    }
}

public class MyVisitor : IVisitor
{
    public void Visit(Level1 level1)
    {
        // Do something ....

        foreach(var i in level1.Level2Items)
            i.Accept(this); // or maybe Visit(i); ?
    }
    public void Visit(Level2 level2)
    {

    }
}

0 个答案:

没有答案