我有观察者设计模式,通过静态方法完成附加/分离所需的观察者。我谨慎地使用了静态方法,因为每个节点的观察者列表在内存方面会花费很多。请让我知道,如果我从设计的角度来看是错误的(使用静态方法和变量是否正确?)。设计和通用列表清理
public static void Attach(FormComponentObserverBase observer)
{
observers.Add(observer);
}
public static void Detach(FormComponentObserverBase observer)
{
observers.Remove(observer);
}
public static void DetachAll()
{
if (observers == null)
{
return;
}
foreach (var o in observers)
{
Detach(o);
}
}
public static void Notify(MyObservedObject c)
{
if (observers == null)
{
return;
}
foreach (var o in observers)
{
o.Update(c);
}
}
观察者正在观察树对象结构。由于树在记忆方面昂贵,我想确保我不会在记忆中留下任何额外的东西。我试图实现IDisposable接口,并通过Dispose方法,我想清理观察者和其他不必要的实例相关对象。就观察员通用清单而言,以下内容足以使观察员清单符合垃圾回收的条件吗?
DetachAll();
observers = null;
这里_gain_有静态方法吗?他们会杀死可测试性,而且你会在你的类的所有实例之间共享观察者(所以他们会得到他们没有注册的对象的通知)。在一个实例方法中放置STATIC(然后是SHARED)对象是否正确?这是你想要的吗?只要放下静态和生活快乐...... – 2013-03-05 16:18:55
我们无法确定数据类型观察者是什么,或者班上还有什么?我们只看到静态方法。 “我有观察者设计模式”并没有真正告诉我们多少。 – 2013-03-05 16:19:43
事情是,如果我保持观察者作为实例变量,我可能会得到树节点的观察者的许多副本。使用静态,我试图避免这么多观察者列表的副本。 Dispose方法只会在根树节点上调用。这是正确的方法吗? – 2013-03-05 16:23:06