在觀察者模式中有2個要素:一個是被觀察對象,另一個是觀察者。但被觀察對象的狀態發生改變會通知觀察者。
舉例:把訂閱報紙的人看作是觀察者,把報紙看作被觀察對象。每當有新的新聞就要通知訂閱報紙的人。本篇分別用實現接口和使用委托事件的方式來實現。
□ 通過實現接口實現
觀察者接口,把接收到的新聞顯示出來。
public interface IObserver{void Update(string news);}
被觀察對象接口,提供3個方法:注冊觀察者,取消觀察者,通知觀察者。
public interface ISubject{void RegisteerObserver(IObserver o);void RemoveObserver(IObserver o);void NotifyObservers();}
被觀察對象實現類,維護著一個觀察者接口的集合,對觀察者的注冊和取消實際上是往這個集合添加或移除數據。
public class NewsPublisher : ISubject{PRivate List<IObserver> observers = new List<IObserver>();private List<string> newsList = new List<string>();public void RegisteerObserver(IObserver o){observers.Add(o);}public void RemoveObserver(IObserver o){observers.Remove(o);}public void NotifyObservers(){foreach (IObserver o in observers){o.Update(newsList[newsList.Count - 1]);}}public void PublishNews(string news){newsList.Add(news);NotifyObservers();}}
另外,被觀察對象實現類還維護著一個string類型的新聞集合,每當發布新聞,就往這個集合里添加數據,并通知所有的注冊觀察者。
新聞熱點
疑難解答