我有一个类A,维护着一个类B对象的列表。 但是类B的每个对象都可以在类A的任何对象中被引用。 类B还维护了一个类A对象的列表,其中它被引用。 程序可以随意创建(多个)类A和B的对象,并且也可以删除它们。
如果我使用C#,可以使用以下代码向两个类添加和删除对象:
public class A
{
private List<B>ListOfObjects_B;
public bool Add(B Object)
{
bool bAdd = false;
if ((Object != null) && (ListOfObjects_B.IndexOf(B) <0))
{
ListOfObjects_B.Add(Object);
Object.Add(this);
bAdded = true;
}
return bAdded;
}
public bool Delete(B Object)
{
bool bDeleted = ListOfObjects_B.Remove(Object);
if (bDeleted == true) Object.Delete(this);
return bDeleted;
}
}
public class B
{
private List<A>ListOfObjects_A;
public bool Add(A Object)
{
bool bAdd = false;
if ((Object != null) && (ListOfObjects_A.IndexOf(A) <0))
{
ListOfObjects_A.Add(Object);
Object.Add(this);
bAdded = true;
}
return bAdded;
}
public bool Delete(A Object)
{
bool bDeleted = ListOfObjects_A.Remove(Object);
if (bDeleted == true) Object.Delete(this);
return bDeleted;
}
}
由于在第二次(通过递归)将对象从ListOfObjects中删除/添加,函数将无法删除/添加,从而避免了无限循环。
但是,尽管A和B不知道对方类的“太多”信息,只是调用了一个Delete/Add函数,但我不喜欢这段代码。
我认为这种问题很普遍,存在一种设计模式可以处理它,以便可以避免递归并且更新两个列表将会更好。我应该使用哪种设计模式?如果还能添加一些代码,我将不胜感激。