设计模式のObserver Pattern(观察者模式)----行为模式
一、問題產生背景
? ? ? ? ?又被稱為訂閱發布模式。
? ? ? ? ?最初流傳最廣的一個面試題:有一只貓咪,貓咪叫了一聲,老鼠跑了,老人驚醒了,男主人罵,小偷嚇得不敢動了....這就產生一個問題的模型,當對象間存在一對多關系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。觀察者模式屬于行為型模式。
二、觀察者模式的通常做法
? ? ??
? ? ? ? 1、 抽象主題(Subject):它把所有觀察者對象的引用保存到一個聚集里,每個主題都可以有任何數量的觀察者。抽象主題提供一個接口,可以增加和刪除觀察者對象。
? ? ? ? 2、 具體主題(ConcreteSubject):將有關狀態存入具體觀察者對象;在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。
??????? 3、抽象觀察者(Observer):為所有的具體觀察者定義一個接口,在得到主題通知時更新自己。
??????? 4、具體觀察者(ConcreteObserver):實現抽象觀察者角色所要求的更新接口,以便使本身的狀態與主題狀態協調。
?
?
結構圖:
三、具體實例
觀察者模式的實現方式有幾種,下面我們用接口方式實現。
1、首先我們建立觀察者的抽象
namespace ObserverPattern {public interface IObserver{void update(string message);} }2、建立被觀察者的抽象
namespace ObserverPattern {public interface ISubject{void Attach(IObserver observer );void Detach(IObserver observer);void Notify(string message);} }3、觀察者實例化
namespace ObserverPattern {public class User:IObserver{private string _name;public User(string name){_name = name;}public void update(string message){Console.WriteLine("hi"+_name+","+message);}} }4、被觀察者實例化(注意其中的觀察者列表)
namespace ObserverPattern {public class SubscriptionSubject:ISubject{private List<IObserver> userList = new List<IObserver>();public void Attach(IObserver observer){userList.Add(observer);}public void Detach(IObserver observer){userList.Remove(observer);}public void Notify(String message){foreach (IObserver observer in userList){observer.update(message);}}} }5、我們整盒調用
namespace ObserverPattern {class Program{static void Main(string[] args){SubscriptionSubject mSubscriptionSubject = new SubscriptionSubject();//創建用戶User user1 = new User("林熙蕾");User user2 = new User("潘春春");User user3 = new User("羅云綺");//訂閱微博 mSubscriptionSubject.Attach(user1);mSubscriptionSubject.Attach(user2);mSubscriptionSubject.Attach(user3);//博主發通知mSubscriptionSubject.Notify("劉德華發微博了");Console.ReadKey();}} }四、設計模式分析
優點:
支持廣播通信。
聚耦合,所有的觀察者被抽象為一個接口。
缺點:
時間較長。
內聯不足,具體表現在,觀察者不能明確知道被觀察者如何變化
可能出現循環調用
?點擊下載代碼
轉載于:https://www.cnblogs.com/xietianjiao/p/8073455.html
總結
以上是生活随笔為你收集整理的设计模式のObserver Pattern(观察者模式)----行为模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django 单元测试小结
- 下一篇: django Forbidden