C++怎么发布订阅和观察者模式
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,本篇内容主要讲解"C++怎么发布订阅和观察者模式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么发布订阅和观察者模式"吧!1、实现思路arr 做订
千家信息网最后更新 2025年01月24日C++怎么发布订阅和观察者模式
本篇内容主要讲解"C++怎么发布订阅和观察者模式",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++怎么发布订阅和观察者模式"吧!
1、实现思路
arr 做订阅了的事件的缓存中心
通过过on把需要做的事push arr 缓存数组中
等待事件触发时 依次emit执行事件
2、代码实现
interface eventHub { arr: Array; on(fn: Function): void; emit(): void;}interface Person { age: number; name: string;}let eventHub: eventHub = { arr: [] as Array , // 订阅 on(fn: Function) { this.arr.push(fn); }, // 发布 emit() { this.arr.forEach((fn) => fn()); },};let person: Person = {} as Person;eventHub.on(() => {//订阅的事件里判断当 person长度为2时 打印person, if (Object.keys(person).length == 2) { console.log(person); }});setTimeout(function () { person.age = 27; //发布的时候去遍历 this.arr 并执行第一次 eventHub.emit();}, 10);setTimeout(function () { person.name = "Zoe"; //发布的时候去遍历 this.arr 并执行第二次 eventHub.emit();}, 20);
3、结果
虽然发布了两次 但最终on 里的console因为外部条件只执行了一次
观察者模式
1、实现思路
与观察者模式类似,但需要分一个观察者,和被观察者
观察者和被观察者存在关联,(内部基于发布订阅模式)
2、代码实现
// 被观察者class Subject { name: string; //实例上定义一个name属性 state: string; observers: any[]; constructor(name:string) { this.name = name; this.observers = []; this.state = ""; } attach(o) { //传入观察者 this.observers.push(o); } setState(newState) { this.state = newState; this.observers.forEach((o) => o.update(this)); }}// 观察者class Observer { name: string; constructor(name) { this.name = name; } update(interviewee) { console.log(`${interviewee.name} say to: ${this.name} ZOE的${interviewee.state}`); }}let hr = new Subject("HR");let observer1 = new Observer("内推者");let observer2 = new Observer("面试者");hr.attach(observer1);hr.attach(observer2);hr.setState("面试通过了");// baby.setState("面试没通过");
3、实现结果
两者的区别
eventHub 发布订阅
on(订阅)和发布(emit)之间没有直接联系,是依赖中间的arr 做衔接 订阅一个push 到arr一个,emit的时候依次执行arr
观察者模式
观察者和被观察者存在关联,(内部基于发布订阅模式)
将观察者的实例作参数 传入被观察者的attach方法中 并缓存在observers 数组中
当观察者setState时候 依次调用缓存数组observers 中观察者的update方法
到此,相信大家对"C++怎么发布订阅和观察者模式"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
观察者
观察
订阅
模式
事件
时候
缓存
C++
数组
方法
代码
内容
实例
思路
结果
关联
学习
实用
更深
之间
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全的相关技术
网络安全与大数据就业前景
软件开发 专用电脑
金蝶专业版数据库怎么写
华为手机dns服务器配置
相机软件开发过程
数据库dba
数据库设计新的
我眼中的网络安全手抄报距题
服务器设置如何取消
网络安全监测装置部署要求
软件开发中介费怎么收
安徽电子网络技术包括什么
网络安全宣传周六载体
万年dna数据库
健鼎内部软件开发
网络安全与执法学什么
开票软件 安全接入服务器
华为云数据库怎么代理
hp服务器的管理口在哪里
查询数据库进程值
数据库是怎么保证原子性状态的
公安网络安全教育学习系统
软件开发源码社区
武汉华为软件开发工资多少
网络安全工程师就业单位
服务器电池经常坏
崇明区品质数据库服务前景
服务器编程技术
办公宝典网络技术