zoukankan      html  css  js  c++  java
  • 观察者模式在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发生了变化(点击了按钮等)的时候,触发了事件,此时通知了其订阅者,也就是观察者。观察者就会自动的触发业务逻辑的处理。

  • 相关阅读:
    使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示
    SpringMVC与Struts2的对比
    事务不提交,也有可能写redo和数据文件
    14.4.1 InnoDB Startup Configuration
    SLB 权重问题
    perl 访问网站一些useragent的设置
    14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁
    nginx 区分pc和mobile 到不同的404页面
    dokcer 运行和进入容器
    docker 私有仓库查询
  • 原文地址:https://www.cnblogs.com/YangFengHui/p/4701418.html
Copyright © 2011-2022 走看看