觀察者模式在MVP中的應用

  先簡單寫下觀察者模式。觀察者模式,又叫作發佈-訂閱模式。觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知全部觀察者對象,是他們可以自動更新本身。架構

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

相關文章
相關標籤/搜索