先简单写下观察者模式。观察者模式,又叫做发布-订阅模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是他们能够自动更新自己。

  /// <summary>
/// 发布者接口
/// </summary>
public interface IPublish
{
void Notify();
string Status { set; get; }
}

发布者接口

 /// <summary>
/// 具体的发布者
/// </summary>
public class PublishA:IPublish
{
private string status;
//发布的事件,供观察者订阅
public NotifyEventHandle OnNotify;
public void Notify()
{
if (OnNotify != null)
{
OnNotify(new NotifyEventArgs { Status = this.Status });
}
} public string Status
{
get
{
return this.status;
}
set
{
this.status = value;
}
}
}

具体发布者

 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);
}
}

具体订阅者

 private void button1_Click(object sender, EventArgs e)
{
PublishA publish = new PublishA();
SubscriberA subscriber1 = new SubscriberA();
SubscriberB subscriber2 = new SubscriberB();
//订阅者1订阅了发布者的事件。
publish.OnNotify += new NotifyEventHandle(subscriber1.Update);
publish.OnNotify += new NotifyEventHandle(subscriber2.Update); publish.Status = "AAA";
publish.Notify();
}

客户端调用

在MVP架构中。UI界面(V)会发布一系列的事件(此时UI就是具体的发布者),提供给presenter(P)订阅(此时Presenter就是具体的观察者)。

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

观察者模式在MVP中的应用的更多相关文章

  1. 三种方式实现观察者模式 及 Spring中的事件编程模型

    观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...

  2. spring事件驱动模型--观察者模式在spring中的应用

    spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用,关于观察者模式在之前的博文中总结过,http://www.cnblogs.com/fingerboy/p/5468994. ...

  3. Unity C# 多态 委托 事件 匿名委托 Lambda表达式 观察者模式 .NET 框架中的委托和事件

    一.多态 里氏替换原则: 任何能用基类的地方,可以用子类代替,反过来不行.子类能够在基类的基础上增加新的行为.面向对象设计的基本原则之一. 开放封闭原则: 对扩展开放,意味着有新的需求或变化时,可以对 ...

  4. 观察者模式--java jdk中提供的支持

    一.简介 观察者设计模式有如下四个角色 抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象 ...

  5. 更好的理解MVC

    mvc除了将数据层和逻辑层分离外,还有更好的优化了代码结构 m只和c交互,v也只和c交互,m与v的交互需要通过c,一共只用考虑4条路 如果不是这样的话,m v c需要考虑和每个人交互,那么就是要考虑 ...

  6. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  7. 前端开发中的 MVC、MVP、MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  8. [译]Google官方关于Android架构中MVP模式的示例

    概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...

  9. Android应用中MVP开发模式

    所谓MVP(Model-View-Presenter)模式.是将APP的结构分为三层: view - UI显示层 view 层主要负责: 提供UI交互 在presenter的控制下修改UI. 将业务事 ...

随机推荐

  1. mysql EOF

    mysql shell 执行脚本 #!/bin/bash export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql-5.6/bin:/usr ...

  2. python日记整理

    都是自己的学习总结,要是总结的有问题大佬麻烦评价一下我好修改,谢谢 python插件插件+pycharm基本用法+markdown文本编写+jupyter notebook的基本操作汇总 一.计算机基 ...

  3. 爬虫之Scrapy和分页

    下一页和详情页的处理 xpath提取时 注意: 结合网页源代码一起查找 不用框架的爬取 获取下一页 自带href属性 1)首页有下一页 next_url = element.xpath('.//a[t ...

  4. STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本)

    今天把stm32F407的工程之IAR建立完成了,特此记录下. 下载官方固件库,STM32F4xx_DSP_StdPeriph_Lib_V1.6.1,V1.8.0版本的同理.新建以下几个文件 src放 ...

  5. phpmyadmin提示The mbstring extension is missing的解决方法

    解决办法:安装php-mbstring yum install php-mbstring

  6. ASP.NET Web网站中App_Code文件夹的作用及使用场景

    原文地址:Web Site项目和ASP.NET Web Application中App_Code文件夹的作用作者:宾的宾 我现在要建一个ASP.NET的网站了,不难吧,开始动手.如下图: 这种方法建立 ...

  7. ACM-ICPC 2018 徐州赛区网络预赛 H. Ryuji doesn't want to study

    262144K   Ryuji is not a good student, and he doesn't want to study. But there are n books he should ...

  8. poj 3281 Dining(网络流+拆点)

    Dining Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20052   Accepted: 8915 Descripti ...

  9. POJ 3057 网络流 Evacuation

    题意: 有一个n×m的房间,四周每个格子要么是墙要么是门.中间部分是墙或者人. 现在所有人要从房间逃出去,每个人的速度为1,也就是每个单位时间只能向上下左右四个方向走一格. 多个人可以站在同一个格子上 ...

  10. matlab callback 数据传递

    M文件中内的每个Callback都可以视为一个独立的可执行的接口,因此,任一个Callback触发后所执行的运算值若要在其他Callback中使用,就无法与MATLAB工作空间内的变量继续执行操作,也 ...