我有觀察者設計模式,通過靜態方法完成附加/分離所需的觀察者。我謹慎地使用了靜態方法,因爲每個節點的觀察者列表在內存方面會花費很多。請讓我知道,如果我從設計的角度來看是錯誤的(使用靜態方法和變量是否正確?)。設計和通用列表清理
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