オブザーバーの設計パターンがあり、必要なオブザーバーのアタッチ/デタッチは静的メソッドを介して行われます。ノードごとにオブザーバーのリストを保持すると、メモリの面で多くのコストがかかる可能性があるため、静的メソッドを意図的に使用しました。設計の観点から間違っている場合はお知らせください (静的メソッドと変数の使用は正しいですか?)。
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;