標籤:
先簡單寫下觀察者模式。觀察者模式,又叫做發布-訂閱模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,是他們能夠自動更新自己。
1 /// <summary>2 /// 發行者介面3 /// </summary>4 public interface IPublish5 {6 void Notify();7 string Status { set; get; }8 }發行者介面
1 /// <summary> 2 /// 具體的發行者 3 /// </summary> 4 public class PublishA:IPublish 5 { 6 private string status; 7 //發布的事件,供觀察者訂閱 8 public NotifyEventHandle OnNotify; 9 public void Notify()10 {11 if (OnNotify != null)12 {13 OnNotify(new NotifyEventArgs { Status = this.Status });14 }15 }16 17 public string Status18 {19 get20 {21 return this.status;22 }23 set24 {25 this.status = value;26 }27 }28 }具體發行者
public delegate void NotifyEventHandle(NotifyEventArgs eventArgs); public class NotifyEventArgs : EventArgs { public string Status { set; get; } }/// <summary> /// 具體的訂閱者 /// </summary> public class SubscriberA { public void Update(NotifyEventArgs eventArgs) { Console.WriteLine("SubscriberA被發行者通知了!發行者的狀態變為:"+eventArgs.Status); } } /// <summary> /// 具體的訂閱者 /// </summary> public class SubscriberB { public void Update(NotifyEventArgs eventArgs) { Console.WriteLine("SubscriberB被發行者通知了!發行者的狀態變為:" + eventArgs.Status); } }具體訂閱者
1 private void button1_Click(object sender, EventArgs e) 2 { 3 PublishA publish = new PublishA(); 4 SubscriberA subscriber1 = new SubscriberA(); 5 SubscriberB subscriber2 = new SubscriberB(); 6 //訂閱者1訂閱了發行者的事件。 7 publish.OnNotify += new NotifyEventHandle(subscriber1.Update); 8 publish.OnNotify += new NotifyEventHandle(subscriber2.Update); 9 10 publish.Status = "AAA";11 publish.Notify();12 }用戶端調用
在MVP架構中。UI介面(V)會發布一系列的事件(此時UI就是具體的發行者),提供給presenter(P)訂閱(此時Presenter就是具體的觀察者)。
在MVP中處理商務邏輯都是有Presenter去做。但是具體什麼時候去處理呢,那就是當UI發生了變化(點擊了按鈕等)的時候,觸發了事件,此時通知了其訂閱者,也就是觀察者。觀察者就會自動的觸發商務邏輯的處理。
觀察者模式在MVP中的應用