转载自:https://jingyan.baidu.com/article/d3b74d64ac3b6c1f77e609c1.html

方法/步骤

 
  1.  

    IObserver<T> 和 IObservable<T> 接口为基于推送的通知提供通用机制,也称为观察者设计模式。。 IObservable<T> 接口表示发送通知(提供程序)的类;IObserver<T> 接口表示接收通知(观察器)的类。 T 表示提供通知信息的类。 在某些基于推送的通知中,IObserver<T> 实现和 T 可以表示相同的类型。

  2.  

    该提供程序必须实现一个方法 Subscribe,指出某个观察器要接收基于推送的通知。 该方法的调用方传递观察器的实例。 方法返回 IDisposable 实现,其可让观察程序在提供程序已停止发送它们的任意时间之前取消通知。

  3.  

    在任何给定时间,给定的提供程序可能具有零个、一个或多个观察器。 该提供程序负责存储对观察器的引用,并且在发送通知之前确保它们有效。 IObservable<T> 接口对于观察器的个数或发送通知的顺序不作任何假设。

    该提供程序通过调用 IObserver<T> 方法向观察器发送以下三种通知:

    【1】当前数据。 提供程序可以调用 IObserver<T>.OnNext 方法来为观察器传递包含当前数据、更改的数据或全新数据的 T 对象。

    【2】一个异常情况。 提供程序可以调用 IObserver<T>.OnError 方法来通知观察器出现了某种错误情况。

    【3】没有进一步的数据。 提供程序可以调用 IObserver<T>.OnCompleted 方法来通知观察器它已经完成通知的发送。

  4.  

    观察者设计模式使订阅者能够向提供程序注册并接收相关通知。 它适合所有需要推送通知的方案。 该模式定义一个提供程序(也称为主题或观察对象)以及零个、一个或多个观察者。 观察者向提供程序注册,并且当任何预定义的条件、事件或状态更改发生时,提供程序就会调用观察者中的一种方法,自动通知所有观察者。 在此方法调用中,提供程序还可以向观察者提供当前的状态信息。 在 .NET Framework 中,通过实现泛型 System.IObservable<T> 和 System.IObserver<T> 接口来应用观察者设计模式。 泛型类型参数表示提供通知信息的类型。

  5.  

    观察者设计模式适用于分布式推送通知,因为它支持两种不同的组件或应用程序层之间的绝对分离,例如数据源(业务逻辑)层和用户界面(显示)层。 每当提供程序使用回调向其客户端提供当前信息时,即可实现该模式。

    实现该模式需要您提供以下内容:

    提供程序或主体,即将通知发送给观察者的对象。 提供程序是一个实现 IObservable<T> 接口的类或结构。 提供程序必须实现一个方法 (IObservable<T>.Subscribe),希望接收提供程序通知的观察者会调用该方法。

    观察者,即接收提供程序通知的对象。 观察者是一个实现 IObserver<T> 接口的类或结构。 观察者必须实现三个方法,提供程序将调用所有这些方法:

    IObserver<T>.OnNext ,向观察者提供新信息或当前信息。

    IObserver<T>.OnError ,通知观察者发生错误。

    IObserver<T>.OnCompleted ,指示提供程序已完成通知发送。

    允许提供程序跟踪观察者的机制。 通常情况下,提供程序使用容器对象(例如 System.Collections.Generic.List<T> 对象)存放对已订阅通知的 IObserver<T>实现的引用。 因此目的而使用存储容器时,提供程序能够处理零到无限数量的观察者。 不定义观察者接收通知的顺序;提供程序可以自由选择任何方法来确定该顺序。

    允许提供程序在完成通知时移除观察者的 IDisposable 实现。 观察者从 Subscribe 方法接收对 IDisposable 实现的引用,所以它们还可以调用IDisposable.Dispose 方法以在提供程序完成通知发送之前取消订阅。

    包含提供程序向其观察者发送的数据的对象。 该对象的类型对应于 IObservable<T> 和 IObserver<T> 接口的泛型类型参数。 尽管该对象可以与IObservable<T> 实现相同,但在通常情况下,该对象为不同的类型。

IObservable 接口的更多相关文章

  1. C# IObservable与IObserver观察者模式

    C#中提供了IObservable<T>接口和IObserver<T>接口来实现观察者模式,IObservable<T>相当于Subject(主题)接口,下面我们就 ...

  2. 解构C#游戏框架uFrame兼谈游戏架构设计

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  3. External Configuration Store Pattern 外部配置存储模式

    Move configuration information out of the application deployment package to a centralized location. ...

  4. php五种常见的设计模式(转载)

    很多人都想着写博客来记录编程生活中的点滴,我也不例外,但想了好长时间不知道写什么........万事开头难,先转载一篇吧..... 设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Ga ...

  5. PHP中常见的五种设计模式

    设计模式只是为 Java架构师准备的 — 至少您可能一直这样认为.实际上,设计模式对于每个人都非常有用.如果这些工具不是 “架构太空人” 的专利,那么它们又是什么?为什么说它们在 PHP 应用程序中非 ...

  6. 【转】五种常见的 PHP 设计模式

    工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完 ...

  7. 五种常见的 PHP 设计模式

    设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”).所 ...

  8. C#游戏框架uFrame

    C#游戏框架uFrame兼谈游戏架构设计 c#语言规范 阅读目录 1.概览 2.基本概念 3.依赖注入 4.Manager of Managers 5.利用UniRX实现响应式编程 6.研究总结 回到 ...

  9. 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息

    前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...

随机推荐

  1. CSS样式链接和文字常用属性

    行内: <div style="color:red;"></div> 内嵌<style>div{background-color:red;}&l ...

  2. 写给IT技术爱好者的一封信

    写给IT技术爱好者的一封信>当前运维素质的分析<... ---------------------- 虽相貌平平,但勤学苦练,亦收获颇丰!如果你决定要成为一名IT从业者,你需要承受以下的东 ...

  3. Uart串口

    title: Uart串口 tags: ARM date: 2018-10-20 16:38:28 --- Uart串口 和单片机的应用没什么区别,首先设置IO复用,设置波特率和数据位,以及中断相关的 ...

  4. namenode format

    https://community.hortonworks.com/content/supportkb/48981/how-to-recover-namenode-ha-when-one-accide ...

  5. JAVA核心技术I---JAVA基础知识(查漏补缺private,static)

    一:private对于类和对象(同C++) private是只有这个类内部可以访问(类的成员函数和定义初始化) private是类之间的限制,而不是对对象的限制<重点> 同类对象是可以直接 ...

  6. mysql安装绑定my.ini

    Windows操作系统中,我们安装Mysql有两个选择: 一是下载MSI点击运行,利用windows系统安装程序的方法按部就班的来安装: 二是下载ZIP,解压出来就能立即使用. 在使用ZIP安装时,安 ...

  7. python 管道 事件(Event) 信号量 进程池(map/同步/异步)回调函数

    ####################总结######################## 管道:是进程间通信的第二种方式,但是不推荐使用,因为管道会导致数据不安全的情况出现 事件:当我运行主进程的 ...

  8. 前端下拉框选择和动态生成调用div

    进入到一个项目期中,一边做项目,一边学习其中用到的知识.这些知识都是零碎的,有数据库,有html,有js,还有django.趁周末时间,整理前面遇到过的前端相关的知识点. 下拉框选择 <html ...

  9. spring中获取dao或对象中方法的实例化对象

    spring中获取dao的中方法的实例化对象: //获取应用上下文对象 ApplicationContext ctx = new ClassPathXmlApplicationContext(&quo ...

  10. Sliverlight常见错误集锦

    1. 使用GridSplitter时候(参考),出现如下错误 C# 中的错误Error 2 The type 'sp:GridSplitter' was not found. Verify…… 对程序 ...