listener模式

2023-10-27

/*
监听者模式
一个listenerCenter,每个listener 对不同的传入参数做不同的事情
把这些listener加入Center列表
然后Center执行做什么事情,调用响应的listener执行事情。
我只需要让center 广播消息,center自会调用事件队列找出对应的对象执行相应的事情
*/
struct Msg
{
int listener;
int event;
};


class StateListener
{
public:
StateListener();
~StateListener();


int name;
void dosomething(int state);
void setName(int n);
};


StateListener::StateListener()
{
}
StateListener::~StateListener()
{
}
void StateListener::setName(int n)
{
name = n;
}
void StateListener::dosomething(int state)
{
switch (state)
{
case 1:
cout << "i am " << name << " fire 1" << endl;
break;
case 2:
cout << "i am " << name << " fire 2" << endl;
break;
}
}


class ListenerCenter
{
public:
ListenerCenter();
~ListenerCenter();
private:
StateListener listenerlist[50];
int count;
public:
void addListener(StateListener l);
void broadcast(Msg msg);
};


ListenerCenter::ListenerCenter()
{
count = 1;
}
ListenerCenter::~ListenerCenter()
{
}
void ListenerCenter::addListener(StateListener l)
{
listenerlist[count++] = l;
}
void ListenerCenter::broadcast(Msg msg)
{
int listener = msg.listener;
int state = msg.event;
if (listener == 0)
{
for (int i = 1; i < count; i++)
{
listenerlist[i].dosomething(state);//广播 全部对象执行
}
}
else
listenerlist[listener].dosomething(state);//单播 对应的listener执行

}


int main()

{

/*
ListenerCenter center;
StateListener s1;
StateListener s2;
s1.setName(1);
s2.setName(2);


center.addListener(s1);
center.addListener(s2);


Msg msg;
msg.listener = 1;
msg.event = 1;
center.broadcast(msg);//1号监听者 事件1 的消息广播


msg.listener = 2;
msg.event = 2;
center.broadcast(msg);//2号监听者 事件2 的消息广播


msg.listener = 0;
msg.event = 2;
center.broadcast(msg);//所有监听者 事件2   消息广播
*/

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

listener模式 的相关文章

  • Ubuntu服务器下安装FastDFS及nginx配置访问等问题记录

    Ubuntu服务器下安装FastDFS及nginx配置访问 下载对应包 编译环境 包解压环境配置 配置nginx模块和安装nginx来进行访问该图片 下载对应包 下载方式一 直接使用 wget 下载 如果太慢 可以去github下载 然后上
  • 三子棋大致构建思路

    设计思路 1 菜单 输入选择 1 PLAY 开始游戏 0 EXIT 退出游戏 其他 重新进入菜单选择 2 PLAY 开始游戏 大致结构 1 创建并打印棋盘 2 玩家下棋 3 电脑下棋 4 判断局势 5 得出结果 6 返回1 菜单 3 创建并
  • [C语言]猜数字

    本文章为c语言猜数字小游戏的教学 设计思路 目录 1 菜单的创建 2 猜数字的实现 3 完整代码 1 菜单的创建 先设计一个类似菜单的界面 供选择来实现游戏或退出 void menu printf n printf 猜数字 n printf
  • 记录-跨域的形成和跨域方法

    1 什么是跨域 根据浏览器的同源策略 凡是发送请求Url的协议 域名 端口三者之间任意一与当前页面地址不同即为跨域 同源策略 同域名 domain或IP 同端口 同协议视为同一个域 一个域内的脚本仅仅具有本域内 的权限 可以理解为本域脚本只
  • 单链表的实现(cpp)

    单链表的实现 cpp版本 链表节点的定义 template
  • 记一位大三计算机同学的2021春招

    知乎传送门 楚留香 你的2022届暑期实习怎么样了 摘要 均为算法岗 MSRA 商汤研究院 百度商业研究院 阿里支付宝算法 腾讯安全联邦学习 美团某toB团队算法 字节AI Lab CV算法 腾讯AI Lab 研究
  • [C语言]柔性数组

    目录 1 柔性数组 2 柔性数组的特点 3 柔性数组的使用 1 柔性数组 柔性数组存在于结构体中 当结构体最后一个成员元素为一个未知大小的数组 则称其为柔性数组 struct s int a char arr 柔性数组 2 柔性数组的特点
  • [C语言]文件操作

    目录 1 文件 1 1程序文件 1 2数据文件 2 文件名 3 文件的打开和关闭 3 1文件指针 3 2文件的打开和关闭 4 文件的顺序读写 4 1fgetc 4 2fputc 4 3fgets 4 4fputs 4 5fscanf 4 6
  • React使用公共文件夹public

    两者区别 其实放在两个文件夹区别就在于是否会被webpack所处理 如果您将文件放入该public文件夹 webpack 将不会处理它 在你打包的时候 会将public文件夹直接复制一份到你构建出来的文件夹中 而src assets目录的文
  • [C语言]浮点型在内存中的存储

    在上一篇文章 我们讲述了整型在内存中的存储 这篇文章我们就一起来看一下 浮点型在内存中的存储 回顾 整型在内存中的存储 C语言 和我一起来认识 整型在内存中的存储 HY PIGIE的博客 CSDN博客 目录 1 浮点数家族 2 整型和浮点型
  • redis自增,定时任务更新评论数和阅读数

    redis定时任务自增实现阅读数和评论数更新 阅读数和评论数 考虑把阅读数和评论数 增加的时候 放入redis incr自增 使用定时任务 定时把数据固话到数据库当中 点击文章的方法里面实现文章阅读数自增 public ArticleVo
  • 记录QTcpSocket碰到的ConnectToHost失败问题

    之前尝试Qt的QTcpSocket 发现ConnectToHost失败 waitForConnected一直返回false 一直不得其解 放弃了 直到最近再次使用 仍然是返回false 下定决心要解决这个问题 心血来潮查了QT的文档 发现有
  • 2021年4月记录(整合redis,springboot加载配置文件顺序)

    1 springboot 2整合redis 参考 1 1 连不上redis 改redis配置Unable to connect to Redis nested exception is io lettuce core RedisConnec
  • MSRA实习记

    文章目录 前言 时间线 实习生集体 办公楼 工作环境 饮食 娱乐活动 薪酬待遇 住宿 总结 前言 我是哈工大2018级本科生 由于大三课程枯燥 选择到北京实习 偶然看到了诗昭姐的招聘启事 幸运地获得了她的认可 获得了人生第一份实习 加入了D
  • 关于RuoYi-Vue和ruoyi-vue-pro的基本使用理解

    文章目录 概要 前后端分离架构 技术栈 技术细节 小结 概要 提示 这里是本文概要 RuoYi Vue和ruoyi vue pro两个Web开源项目都是基于当下主流技术栈的前后端分离版本 后端采用SpringBoot多模块架构 前端使用Vu
  • WebView加载h5页面弹窗无法显示问题和申请摄像头权限问题做个记录

    参考文章 WebView 加载H5页面空白问题 WebView使用getUserMedia 首先需要设置webview支持js 在Android 9 0后 访问地址如果是http开头的 还需要在配置文件里设置允许http访问 android
  • 从头走前端-百度前端技术学院(1)

    记录自己在网上自学加复习的前端笔记 当然还有一些其他涉及的相关知识 问题 在web建站技术中 HTML HTML5 XHTML CSS JavaScript PHP SQL web services是什么 答 首先知道网站的访问过程 1 输
  • [Centos] 如何查看linux系统架构(amd64、arm、arm64

    这几天搭建一个基于扣扣的聊天机器人项目时总会无法运行 试想是架构选错了 一直在网上收集查看架构的详细方法 上链接 https www cnblogs com liyuanhong articles 4859816 html
  • Kibana在Centos上开机启动

    1 需要下载kibana 去官网下 2 解压到自己指定的目录下 我是放到了 usr local下 3 执行 vi usr lib systemd system kibana service 插入下面内容 Unit Description k
  • Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等

    jeesite关于权限这方面的记录或者文章很少 看官方文档又看不懂 自己的业务又需要进行权限处理 怎么办 当然问大佬了 我就记录下我的解决办法 给jeesite权限方面的文章做点贡献 我先说下我的业务逻辑 我需要实现不同公司的人登陆后台 只

随机推荐

  • k8s学习-CKS真题-日志审计 log audit

    目录 题目 环境搭建 解题 模拟题 参考 题目 Task 在 cluster 中启用审计日志 为此 请启用日志后端 并确保 日志存储在 var log kubernetes audit logs txt 日志文件能保留 10 天 最多保留
  • 个别网站访问不了的解决方法

    当电脑只有个别网站无法打开时 极有可能是因为该网站的网址无法被当前的dns解析而造成的 解决方法 1 在可以访问的电脑上ping 网址 得到该网址对应的ip A 2 在访问不了该网址的电脑上ping 上个步骤获得ip 看是否能ping通 如
  • 解决nginx搭建图片服务器访问图片404

    本人主要解决搭建nginx搭建图片服务器 然后访问图片404的问题 原文链接 cd usr local nginx vim nginx conf nginx conf 博主的错误是local刚开始写的是 location images ro
  • 添加数值标签——Python实现

    添加数值标签 Python实现 在数据可视化的过程中 通常需要将图表中的数据点标记上相应的数值 来方便观察者对数据的理解 而在Python中 我们可以使用matplotlib库来进行绘图 并通过其提供的函数来添加数值标签 下面将以折线图为例
  • 【满分】【华为OD机试真题2023 JS】数组的中心位置

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 数组的中心位置 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给你一个整数数组nums 请计算数组的中心位置 数组中心位置是数组的一个下标 其左侧所有元素相乘的
  • Java入门-学习黑马程序员Java基础视频教程(到P92)

    目录 P0 写在前面的小知识 P3 Java环境搭建 JDK安装 常用命令 P4 入门程序HelloWorld P7 补充知识 JDK组成 跨平台原理 P8 补充知识 JDK安装后Path和JAVA HOME环境变量 P9 IDEA开发工具
  • OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码

    Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具 它的源代码能够从 https github com TadasBaltrusaitis OpenFace 下载 OpenFace主要包含面部关键点检測 fa
  • React 实现井字棋游戏 (tic-tac-toe) 教程 (6) <译自官方文档>

    React 实现井字棋游戏 tic tac toe 教程 1 lt 译自官方文档 gt React 实现井字棋游戏 tic tac toe 教程 2 lt 译自官方文档 gt React 实现井字棋游戏 tic tac toe 教程 3 l
  • Jama实现奇异值分解需要注意的问题(SVD)

    可以直接使用Jama的svd 例如 SingularValueDecomposition s paraMatrix svd 但是一定要注意前提是该矩阵的行比列大才行 否则会报错
  • 深入理解Vue双向数据绑定

    MVVM Vue的双向数据绑定是指model 模型 也就是vue实例中的数据 和view 视图 的双向绑定 即一个发生改变 另一个也会改变 首先了解一下什么是MVVM model view viewmodel 在 MVVM 架构中 引入了
  • selenium webdriver webelement获取标签方法

    1 等待浏览器加载完指定的标签 from selenium webdriver support wait import WebDriverWait from selenium webdriver support import expecte
  • 使用C++中用OLEDB读dbf文件,报“外部表不是预期的格式”错误的处理

    使用C builder的ADO控件访问dbf文件 执行SQL时报错 我的connect连接字符串 con1 gt ConnectionString Provider Microsoft Jet OLEDB 4 0 Data Source s
  • python 基于GPS空间相似度的K-means轨迹聚类

    python 基于空间相似度的K means轨迹聚类 数据读取 定义不同轨迹间的距离 计算距离矩阵 k means聚类 这里分享一些轨迹聚类的基本方法 涉及轨迹距离的定义 kmeans聚类应用 需要使用的python库如下 import p
  • Node事件循环

    node事件循环和浏览器事件循环完全不一样 Node事件循环阶段 timers 定时器 此阶段执行setTimeout和setInterval调度的回调函数 I O callback I O回调 此阶段执行几乎所有的回调函数 除了close
  • C语言---栈(详解)---数据结构

    如果要拿数据要先拿最上面的 不允许跳过第一个 拿第二个 先重定义类型 意义前几篇都要讲 就不再赘述 实现栈要用到的头文件 结构体 top是记录栈中现有多少个数据 并且top一直处于栈顶 capacity就是容量大小 如果大于容量大小 那么我
  • 企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui + 前后端分离 + 二次开发

    功能描述 1 门户管理 所有用户可在门户页面查看所有的公告信息及相关的通知信息 主要板块包含 招标公告 非招标公告 系统通知 政策法规 2 立项管理 企业用户可对需要采购的项目进行立项申请 并提交审批 查看所有的立项信息 主要功能包含 招标
  • 最强自动化测试框架Playwright(34)CDPSession

    在 Playwright 中 CDPSession 类是用于与浏览器的 Chrome DevTools Protocol CDP 会话进行交互的对象 CDP 是与Chromium浏览器通信的底层协议 它提供了许多与浏览器进行交互和控制的功能
  • 电动机三相绕组的星形接线法和三角形接线法

    三相异步电动机的定子绕组由U V W三相绕组组成 这三相绕组有6个接线端 它们与接线盒的6个接线柱连接 在接线盒上 可以通过将不同的接线柱短接 来将三相异步电动机定子绕组接成星形或三角形 图1 三相异步电动机接线盒 1 星形接线法 要将定子
  • FutureTask源码解析(详细)

    FutureTask源码解析 详细 首先futuretask实现了Runablefuture接口 此接口声明了run方法 而Runablefuture接口继承了runable和future接口 future接口定义了某些方法比如get获取结
  • listener模式

    监听者模式 一个listenerCenter 每个listener 对不同的传入参数做不同的事情 把这些listener加入Center列表 然后Center执行做什么事情 调用响应的listener执行事情 我只需要让center 广播消