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();
代碼解析
觀察者模式實現了對象間狀態的一致性,當一個對象狀態發生改變時,依賴該對象的對象都會得到狀態變更的通知。
留言
張貼留言