次のようなインターフェースを使用した訪問者パターンの実装では (インターフェース自体が間違っていると思われる場合はお気軽に教えてください)、訪問したすべてのアイテムのリストを追跡する責任は誰にありますか? ビジターかビジタブルか?具体的には、トラッカーは、同じアイテムが 2 回アクセスされないようにする必要もあります (アクセスしているグラフに循環参照が含まれている場合)。
/// <summary>
/// Defines a type that may accept visitors.
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IVisitable<T>
{
// Methods
void Accept(T instance, IVisitor<T> visitor);
}
/// <summary>
/// Defines a type that visits objects.
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IVisitor<T>
{
// Methods
void Visit(IVisitable<T> visitable);
// Properties
bool HasCompleted { get; }
}