热门关键字:
jquery > jquery教程 > html5 > C++屌屌的观察者模式-同步回调和异步回调

C++屌屌的观察者模式-同步回调和异步回调

255
作者:管理员
发布时间:2020/3/23 10:49:46
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1090

  C++屌屌的观察者模式-同步回调和异步回调

  目录

  一、概述

  1、同步观察者

  2、异步观察者

  二、效果展示

  三、同步观察者

  四、异步观察者

  五、相关文章

  原文链接:C++屌屌的观察者模式-同步回调和异步回调

  一、概述

  说起观察者模式,也是比较简单的一种模式了,稍微工作有1年经验的同学,写起来都是666...

  想看观察者模式的说明可以直接上菜鸟教程|观察者模式这个地址去看。

  本篇文章其实就是一个简单的观察者模式,只是使用了模板的方式,把我们的回调接口进行了参数化,这样有什么好处呢?

  好处当然是大大的有了。平时我们在不同业务逻辑之间写观察者模式呢,都得写好多个,大家有没有发现,所有的被观察者Subject其实很多操作都是一样的。

  本篇我们带来两种观察者模式:同步观察者和异步观察者

  1、同步观察者

  顾名思义,同步观察者其实就是不管是谁,触发了Subject的Update操作,该操作都是同步进行的,他会调用所有的观察者(Observer)的OnUpdate接口,来通知Observer处理改变操作。

  如效果展示图中的第一个单次拉取页签,当我们点击拉取按钮时,就相当于触发了一次Subject对象的Update操作

  2、异步观察者

  异步观察者模式上和同步观察者基本一样,只是在事件处理上有稍微不同

  执行Update操作是由Subject自己去完成的

  调用Observer的OnUpdate回调接口时,处于工作线程中

  Subject所有的请求操作都是在工作现场中进行

  如效果图所示,定时拉取观察者模式,Subject启动了一个后台线程,3秒钟拉取一次数据,并回调到界面

  二、效果展示

  如下图所示,是一个简单的观察者模式事例。

  单次拉取:演示了同步观察者模式

  定时拉取:演示了异步观察者模式

  工程结构如图所示,这里只把头文件的目录展示出来了。

  实现文件的目录和头文件类似,为了截图方便所以做了隐藏操作。

  HeaderFiles目录下有2个虚拟文件夹,分别就是对单次拉取和定时拉取功能的实践

  下面我们就来正式开始讲解这个屌屌的观察者模式

  三、同步观察者

  1、首先就是定义一堆接口和回调参数

  structDataItem

  {

  std::stringstrID;

  std::stringstrName;

  };

  typedefIUpdate1<DataItem>ISignalObserver;

  //单次回调

  structISignal:publicSubjectBase<ISignalObserver>

  {

  virtualvoidRequestData()=0;

  };





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:html
友荐云推荐