在具有以下接口的访问者模式的实现中(如果您认为接口本身错误,请随时告诉我),谁应该负责跟踪所有访问项目的列表?访问者还是可访问者?具体来说,跟踪器还必须负责确保同一项目不会被访问两次(如果我正在访问的图表包含循环引用)。
/// <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; }
}