C# 程式設計經典300例 實例101 果園監控 觀察者模式

      實例101介紹觀察者模式,作者提供一個觀察者模式的範例,要更加了解觀察者模式還要再參考其他書籍。


實例描述


範例以果園監控為例來介紹觀察者模式的使用方法。在北京果園與上海果園都安排了監控員,當果園狀態變為某一種水果,監控員會接受到狀態變更通知。


輸出字串「北京果園監控員監控蘋果園」、「上海果園監控員監控蘋果園」。


實現過程


//果園介面


public interface IOrchard


{


   void Add(IMonitor monitor);


   void Remove(IMonitor monitor);


   void Notify(IMonitor monitor);


}



//果園類


public class Orchard:IOrchard


{


   private List<IMonitor> monitors = new List<IMonitor>();


   public string State {get; set;}


   public void Add(IMonitor monitor)


   {


       monitor.Add(monitor);


   }


   public void Remove(IMonitor monitor)


   {


       monitor.Remove(monitor);


   }


   public void Notify()


   {


       foreach (var monitor in monitors) monitor.Update();


   }


}



//果園監控員介面


public interface IMonitor


{


   void Update();


}



//果園監控員類


public class Monitor:IMonitor


{


   private Orchard orchard;


   private string name;


   public Monitor (Orchard myClass, string name)


   {


       this.orchard = myClass;


       this.orchard.add(this);


       this.name = name;


   }


   public void Update()


   {


       Console.WriteLine(“{0}監控{1}”, name, orchard,State);


   }


}


main函數代碼如下:


Orchard orchard = new Orchard();


IMonitor bjMonitor = new Monitor(orchard,”北京果園監控員” );


IMonitor shMonitor = new Monitor(orchard,”上海果園監控員” );


orchard.State = “蘋果園”


orchard.Notify();


代碼解析


觀察者模式實現了對象間狀態的一致性,當一個對象狀態發生改變時,依賴該對象的對象都會得到狀態變更的通知。


 



留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der