观察者模式在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就是具体的观察者)。

在MVP中处理业务逻辑都是有Presenter去做。但是具体什么时候去处理呢,那就是当UI发生了变化(点击了按钮等)的时候,触发了事件,此时通知了其订阅者,也就是观察者。观察者就会自动的触发业务逻辑的处理。

posted @ 2015-08-04 11:04  GY小小鸟  阅读(399)  评论(0编辑  收藏  举报