2013-06-20 15 views
0

我剛開始學習C#觀察者模式,我的要求是觀察者模式正好相反家長:僅僅實現觀察者模式(C#)的相反 - 監控所有孩子的

我們有運行多個進程並且一個進程監控它們全部。 每個進程都可以(如果發生某些事件)通知父進程。

這個問題似乎已經出現了這個問題「What is the opposite of the observer pattern?」但還沒有代碼示例。

爲了理解觀察者模式,我在下面由Jon Skeet在這個答案中提到了下面的代碼。

Super-simple example of C# observer/observable with delegates

 using System; 

     class Observable 
     { 
      public event EventHandler SomethingHappened; 

      public void DoSomething() 
      { 
      EventHandler handler = SomethingHappened; 
      if (handler != null) 
      { 
      handler(this, EventArgs.Empty); 
      } 
     } 




     class Observer 
     { 
      public void HandleEvent(object sender, EventArgs args) 
      { 
      Console.WriteLine("Something happened to " + sender); 
      } 
     } 



    class Test 
    { 
     static void Main() 
     { 
     Observable observable = new Observable(); 
     Observer observer = new Observer(); 
     observable.SomethingHappened += observer.HandleEvent; 

     observable.DoSomething(); 
     } 
    } 

現在讓我們假設,我們只有一個觀察者(父進程)和許多子進程。如何在c#中以觀察者模式實現這一點。是否有其他模式可用於此實現?

感謝您提前給出答案。

+1

那麼,爲什麼你不使用觀察者模式?每個進程都實現了oberservable接口,並且一個進程監視它們全都觀察每個進程?將是最清潔的解決方案恕我直言 – Coxer

回答

3

你試圖解決什麼問題?觀察者模式是關於觀察者與觀察者之間的隔離,反之亦然,讓您可以靈活地添加新的觀察,而無需修改觀察者。只需在父進程中爲子進程提供一個委託來在發生有趣的事件時觸發。這是Observer模式的一個非常經典的選擇,所以我沒有真正明白你的想法與你的場景「如此相反」。

您應該在開始子進程時傳入委託並讓它們掛在參考上。這樣,您不必爲子進程提供一種機制來查找父進程,無論是通過操作系統,通過單例還是通過全局變量,任何選項往往會打敗單元可測試性。作爲一個側面說明,當首次描述觀察者模式時,主流OO語言沒有委託類功能。實質上,代表是在C#語言和.NET平臺中組合的觀察員。

+0

明白了..謝謝@Ponus –