东莞塘厦网站建设平台网站建设预算表

web/2025/10/4 19:57:25/文章来源:
东莞塘厦网站建设,平台网站建设预算表,长春做官网的公司,怎样自己制作手机app软件目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式#xff08;Observer Pattern#xff09;#xff0c;也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系#xff0c; …目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式Observer Pattern也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系 也就是多个对象依赖于一个对象当该对象的状态发生改变时其他对象都能够收到相应的通知 意图 定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都得到通知并被自动更新。主要解决 一个对象状态改变给其他对象通知的问题而且要考虑到易用和低耦合保证高度的协作。如何解决 使用面向对象技术可以将这种关系弱化。 优点 观察者和被观察者是抽象耦合的建立了一套触发机制。 缺点 如果一个被观察者对象有很多的直接和间接的观察者的话通知所有的观察者需要花费很长的时间如果在观察者和被观察者目标之间有循环依赖的话观察目标会触发他们之间的循环调用可能会导致系统崩溃观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的而仅仅是知道观察目标发生了变化。 代码实现 场景说明 我们现在有三个观察者和三种消息这三个观察者分别对不同的消息感兴趣 我们实现的话可以简单的设置三个观察者一个主题类被观察者。 这三个观察者可以设置自己喜欢的、感兴趣的消息类型1、2、3。 他们处理收到的消息就是打印一下自己收到了什么消息。 具体实现如下 实现代码 /*observer1 observer2 observer3Subject 主题主题更改应该及时通知相应的观察者去处理相应的事件 */ class Observer // 观察者抽象类 { public://处理消息的接口virtual void handle(int msgid) 0; };//第一个观察者实例 class Observer1 : public Observer { public:void handle(int msgid){switch (msgid){case 1:cout Observer1 recv 1 msg endl;break;case 2:cout Observer1 recv 2 msg endl;break;default:cout Observer1 recv unkonw msg! endl;break;}} }; //第二个观察者实例 class Observer2 : public Observer { public:void handle(int msgid){switch (msgid){case 2:cout Observer2 recv 2 msg endl;break;default:cout Observer2 recv unkonw msg! endl;break;}} }; //第三个观察者实例 class Observer3 : public Observer { public:void handle(int msgid){switch (msgid){case 1:cout Observer3 recv 1 msg endl;break;case 3:cout Observer3 recv 3 msg endl;break;default:cout Observer3 recv unkonw msg! endl;break;}} };//主题类 class Subject { public://给主题增加观察者对象void addObserver(Observer* obser,int msgid){_subMap[msgid].push_back(obser);}//主题检测发生改变通知相应的观察者对象处理事件void dispatch(int msgid){auto it _subMap.find(msgid);if (it ! _subMap.end()){//通过多态实现不同的指向for (Observer* pObser : it-second){pObser-handle(msgid);}}} private://用来保存订阅的消息unordered_mapint, listObserver* _subMap; }; 我们可以看到主题类Subject的数据成员是一个unordered_map。使用这个是因为我们不需要数据是有序的为了提高增删查的速率使用了无序map。 使用map的好处是它作为一个键值对可以存储我们想要的数据类型消息类型订阅此消息类型的观察者们。 并且在主题类Subject的成员方法addObserver中我们使用了一个中括号运算符[]重载的特性 如果当前容器中存有相应的msgid键的话就直接添加对应的值Obser 如果当前容器中没有相应的msgid键的话就直接添加该键并且添加一个默认的值。 运行结果 我们使用如下的代码 void main() {Subject subject;Observer* p1 new Observer1();Observer* p2 new Observer2();Observer* p3 new Observer3();subject.addObserver(p1, 1);subject.addObserver(p1, 2);subject.addObserver(p2, 2);subject.addObserver(p3, 1);subject.addObserver(p3, 3);int msgid 0;for (;;){cout 请输入消息id endl;cin msgid;if (msgid -1)break;subject.dispatch(msgid);//发起通知} } 运行结果如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云虚拟主机建网站宁波模板建站多少钱

题型:链表 链接:2. 两数相加 - 力扣(LeetCode) 来源:Leet 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 …

上海太江建设网站柳州建网站

文章目录 实验概览目标实验环境任务 1:查看网络拓扑并创建基准任务 2:创建中转网关任务 3:创建中转网关挂载任务 4:创建中转网关路由表任务 4.1:创建路由表关联任务 4.2:创建路由传播 任务 5:更…

政务服务网站建设文档好看开源企业网站模板

软件架构风格:您的系统设计指南 软件架构不仅仅是组织代码的方式,它是对软件整体结构和行为的全面规划。一个好的架构能够让软件更加灵活、可维护,并且能够应对未来的变化。下面是一些流行的软件架构风格,以及它们的C#代码例子&a…

有专门做ppt的网站金坛网站建设价格

概述 NTP 是 Network Time Protocol 的简称,也就是网络时间协议,它可以通过网络来同步时间的服务器。Windows 自带的 NTP 服务器都在美国,有时间经常无法访问。 中国境内 中国 NTP 快速授时服务 cn.ntp.org.cn阿里云公共 NTP 服务器 ntp…

python策略网站怎么做学院网站建设的作用

题目1:104. 二叉树的最大深度 - 力扣(LeetCode) 题目1描述: 题目1分析及解决: (1)base case:当前节点为null时,以当前节点为根节点的树最大深度是0。 (2&…

网站设计实施北京网站优化推广效果

“我在一家医院诊断为青光眼,然后就做了青光眼手术。结果没有成功,后面产生了脉络膜脱离,从4月到10月底一直没有恢复,我去找医生结果那家医院的医生让我等……等着恢复……”张先生是一位青光眼术后患者,一场手术给他带…

珠宝首饰网站模板百度官方下载

1、前言 mapstruct中常用注解如Mapping,AfterMapping,BeanMapping等的使用,通过案例说明各式各样的业务pojo对象之间如何借助mapstruct完成相互之间的转换,减少代码量的同时也能突出业务逻辑流程,让你的代码里写起来更有规范可言。 2、简介 Reference Guide – MapStruct 3…

服装网站建设基本流程在婚恋网站上做红娘怎么样

文章目录 一.基础语法1.编码2.标识符3.保留字4.注释5.行与缩进6.多行语句7.数字(Number)类型8.字符串(String)9.空行10.等待用户输入11.同一行显示多条语句12.多个语句构成代码组13.print 输出14.import 与 from...import 二.基本数据类型1.变量和赋值2.多个变量赋值3.标准数据…

简网站建设流程步骤洛阳市伊滨区建设局网站

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 之前讲到了流程保存的时候还要看是否是自定义业务流程应用类型,若是保存的时候不再检查是否有关…

怎样做网站手机客户端做网站商城怎么样

Zk常规启动的命令如下 sh bin/zkServer.sh start 启动过程如果存在失败,是没办法直接看出什么问题,只会报出来 Starting zookeeper … FAILED TO START 可以用如下命令启动,便于查看zk启动过程中的详细错误 sh bin/zkServer.sh start-for…

网站吸流量软件编程入门先学什么

作用域: var 声明的变量具有全局作用域和函数作用域,可以跨块访问。let 和 const 声明的变量还具有块级作用域,意味着它们在声明它们的块(例如,if 块、for 块、函数块等)内可见。(之前没有块作用…

佛山建站软件广东三网合一网站建设报价

0 引言 近年来,随着信息技术飞速发展和互联网的日益普及,尤其是以视频为信息主要来源的多媒体领域越来越受到人们的关注。H.264是ITU-T的视频编码专家组(VCEG)和ISO/IEC的活动图像编码专家组(MPEG)的联合视频组(Joint Video Te…

网上做预算的网站中小型企业网络拓扑图及配置

 相关概念 面向对象的三个特征 封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不…

杭州pc网站开发公司有哪些家装设计图片

三国杀中,某些武将因为太强或者太弱,不能适应游戏环境,都会进行修改,例如:李丰、马良、伏皇后、曹冲等等,但这些武将修改之后,原有武将就淘汰了。其实,还有一类武将,技能…

微站网WordPress生成电商小程序

本文转载自公众号:珞珈大数据。本次论文讲解的是胡森 邹磊 于旭 王海勋 赵东岩等作者写的论文-Answering Natural Language Questions by Subgraph Matching over Knowledge Graphs,主要是分享一些阅读论文的收获,希望能对正在学习自然语…

网站模板源代码下载加强网站建设与管理的通知

一、showModalDialog和showModelessDialog有什么不同?   showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。   showModelessDialog:被打开后,用户…

网站备备份教程网站开发的前端框架有哪些

目录 概述 1 STM32H750 HSE时钟介绍 2 使用STM32Cube创建Project 3 认识HSE时钟 3.1 HSE时钟的特性 3.2 HSE的典型应用电路 4 STM32Cube中配置时钟 4.1 时钟需求 4.2 配置参数 4.2.1 使能外围资源 4.2.2 使用STM32Cube注意项 4.2.3 配置参数 5 总结 概述 本文主要…

网站规划与开发技术属于什么大类做自媒体资源的网站

多线程 线程 1.什么是线程 进程是一个执行空间 , 线程就是其中真正工作的单位 , 每一个进程至少有一个线程(如果我们把操作系统比喻为一个工厂 , 进程就是车间 , 线程就是流水线) 进程包含了运行该程序所需要所有资源 , 进程是一个资源单位 , 线程是CPU的最小执行单位 每一个进…

国内网站赏析扁平化 wordpress 主题

在JavaScript中,map() 是一个数组方法,它创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值。这个方法不会改变原数组。 map() 方法的基本语法如下: javascriptarray.map(function(currentValue, index,…

网站如何被谷歌收录网站模板源码

对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法 一:基本语法 const obj {uname: 微木,age: 10}const { uname, age } objconsole.log(uname, age); 对象解构的变量名要与解构对象中属性名相同,否则就会返回undefined解构的变量名不能…