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

  /// <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. 201621123080《java程序设计》第14周实验总结

    201621123080<java程序设计>第14周实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2. ...

  2. LeetCode之Weekly Contest 93

    第一题:二进制间距 问题: 给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离. 如果没有两个连续的 1,返回 0 . 示例 1: 输入:22 输出:2 解释: 22 的 ...

  3. python基本操作(四)

    与用户交互 为什么交互? 计算机取代人类,解放劳动力 如何交互 print('-'*100) input('请输入你的姓名:') print(""100) Python2和Pyth ...

  4. GoF23种设计模式之行为型模式之责任链模式

    一.概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止.其设计思想是:给对多个对象处理一个请求的机会, ...

  5. logging记录了其他操作的问题

    做atm作业的时候,记录转账操作的那个功能的文件里,同时也记录了增加账号和冻结账号的操作 2018-11-28 17:14:51,754 : transfer : INFO : 用户edward向用户 ...

  6. IOC容器和Bean的配置实例

    实验1: <!--实验1:通过IOC容器创建对象,并为属性赋值 --> <!-- 需要由IOC容器创建对象的全类名 --> <!-- 为了便于从IOC容器中获取book对 ...

  7. LeetCode(203) Remove LinkedList Elements

    题目 Remove all elements from a linked list of integers that have value val. Example Given: 1 –> 2 ...

  8. 水题:51Nod1432-独木舟

    1432 独木舟 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 Problem Description n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两 ...

  9. Leetcode1--->数组中两数之和等于给定数

    题目: 给定一个数组nums,目标数target.在数组中找到两数之和为target的数,返回两数的下标举例: Given nums = [2, 7, 11, 15], target = 9, Bec ...

  10. 利用bochs调试Linux 0.11内核

    引导程序调试软件bochs,跟配套的linux0.11内核img下载地址分别是: http://sourceforge.net/projects/bochs/http://www.oldlinux.o ...