观察者模式:推模型与拉模型
简介
在观察者模式中,又分为推模型和拉模型两种方式。
● 推模型
主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。
● 拉模型
主题对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到主题对象中获取,相当于是观察者从主题对象中拉数据。一般这种模型的实现中,会把主题对象自身通过update()方法传递给观察者,这样在观察者需要获取数据的时候,就可以通过这个引用来获取了。
推模型的栗子可以见这篇文章,观察者模式.下面给出拉模型的栗子。
拉模型的抽象观察类
拉模型通常都是把主题对象当作参数传递
拉模型的具体观察者类
拉模型的抽象主题类
拉模型的抽象主题类主要的改变是nodifyObservers()方法。在循环通知观察者的时候,也就是循环调用观察者的update()方法的时候,传入的参数不同了
拉模型的具体主题类
跟推模型相比,有一点变化,就是调用通知观察者的方法的时候,不需要传入参数了
两种模式的比较
■ 推模型是假定主题对象知道观察者需要的数据;而拉模型是主题对象不知道观察者具体需要什么数据,没有办法的情况下,干脆把自身传递给观察者,让观察者自己去按需要取值。
■ 推模型可能会使得观察者对象难以复用,因为观察者的update()方法是按需要定义的参数,可能无法兼顾没有考虑到的使用情况。这就意味着出现新情况的时候,就可能提供新的update()方法,或者是干脆重新实现观察者;而拉模型就不会造成这样的情况,因为拉模型下,update()方法的参数是主题对象本身,这基本上是主题对象能传递的最大数据集合了,基本上可以适应各种情况的需要。
观察者模式:推模型与拉模型相关推荐
- java事件驱动模型_Spring事件驱动模型详解
事件驱动模型简介 事件驱动模型也就是我们常说的观察者,或者发布-订阅模型:理解它的几个关键点:首先是一种对象间的一对多的关系:最简单的如交通信号灯,信号灯是目标(一方),行人注视着信号灯(多方): 当 ...
- rsync推拉模型及结合inotify实现推模型自动同步
一.前言 无论使用什么操作系统下,都经常有同步文件的需求,不管发生在本地,还是发生在本地和远程主机之间.那么应该怎么做呢? 使用拷贝类的命令,本地使用cp命令,复制到远程主机使用scp这样的命令,保证 ...
- php微博互粉,PHP+redis实现微博的拉模型案例详解
本文实例讲述了PHP+redis实现微博的拉模型.分享给大家供大家参考,具体如下: 上回写了一篇推模型的内容,这回分享一篇拉模型的内容. 拉模型 拉模型就是展示微博的时候,获取自己的所有关注的人,然后 ...
- 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制 转
无人驾驶运动学模型--线性时变模型预测控制的思路推演过程_百叶书的博客-CSDN博客_线性时变模型预测控制
- 四十二、Fluent欧拉模型流化床模拟
1. 流化床概念 流态化床,简称流化床,是一种利用气体或液体通过颗粒状固体层而使固体颗粒处于悬浮运动状态,并进行气固相反应过程或液固相反应过程的反应器. 欧拉模型: 欧拉多相流模型可以模拟颗粒流动,但 ...
- 等维递推GM(1,1)模型、无偏灰色模型
(1)等维递推GM(1,1)模型 通常, 全数据GM(1,1)模型是使用固定的 nnn 期数据进行建模,但随着时间的推移,老数据的新息意义将逐步降低,未来的一些抗干扰因素将不断地侵入系统并产生影响,因 ...
- 无人驾驶运动学模型——线性时变模型预测控制的思路推演过程
无人驾驶运动学模型--线性时变模型预测控制的思路推演过程 在做MPC仿真时,有些代码看不太懂,就去重翻了龚建伟的<无人驾驶车辆模型预测控制>这本书,怎么说呢,这么说吧,应该说它是目前为止讲 ...
- 华为申请注册盘古大模型商标;京东推出言犀大模型,率先布局产业应用
7月14日科技新闻早知道,一分钟速览. 1.华为申请注册盘古大模型商标: 据天眼查 App 显示,7 月 7 日,华为技术有限公司申请注册"华为云盘古"."Huawei ...
- 最小覆盖模型matlab_数学规划模型的matlab求解 非线性最小二乘lsqnonlin
数学规划模型是优化模型的一种,包括线性规划模型(目标函数和约束条件都是线性函数的优化问题); 非线性规划模型(目标函数或者约束条件是非线性的函数); 整数规划(决策变量是整数值得规划问题); 多目标规 ...
- linux的i o模型,I/O模型的分类及简介
导读 同步异步I/O,阻塞非阻塞I/O是程序员老生常谈的话题了,也是自己一直以来懵懵懂懂的一个话题.比如:何为同步异步?何为阻塞与非阻塞?二者的区别在哪里?阻塞在何处?为什么会有多种IO模型,分别用来 ...
最新文章
- 只用一张图+相机走位,AI就能脑补周围环境,来自华人团队 | CVPR2022
- 读《Linux内核设计与实现》我想到了这些书
- 如何在WebPart中访问页面上的其他WebPart
- Android 9.0新特性
- oracle 重复的记录数,如何确定Oracle数据库表中重复的记录
- 从零开始springboot 第二讲
- python定义变量_Python基础 变量的基本使用
- hp android 平板,惠普三款Android平板电脑新产品曝光
- 图像处理——在Python中使用OpenCV显示图像
- Webb.WAVE项目开发体会与心得
- 视频语音识别_视频语音识别体验_视频语音识别试用 - 云+社区 - 腾讯云
- 如何写出优质干净的代码,这6个技巧你不能错过
- 程序员面试宝典 第五版
- 重庆大学和北京交通大学计算机学院,北京交通大学录取分为何比一些985高?真是能上985就不上211吗?...
- word的图片和自选图形组合问题
- 2021 编程语言排行榜出炉
- Web前端开发需要学习哪些知识
- HEVC 高级运动向量预测技术(AMVP)
- Altium Designer生成Gerber文件的设置(嘉立创建议 )
- Learning Typography for Video Editors 学习视频编辑的排版 Lynda课程中文字幕