先簡單寫下觀察者模式。觀察者模式,又叫作發佈-訂閱模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知全部觀察者對象,是他們可以自動更新本身。架構
1 /// <summary> 2 /// 發佈者接口 3 /// </summary> 4 public interface IPublish 5 { 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 Status 18 { 19 get 20 { 21 return this.status; 22 } 23 set 24 { 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就是具體的觀察者)。ide
在MVP中處理業務邏輯都是有Presenter去作。可是具體何時去處理呢,那就是當UI發生了變化(點擊了按鈕等)的時候,觸發了事件,此時通知了其訂閱者,也就是觀察者。觀察者就會自動的觸發業務邏輯的處理。this