基于MATLAB的面对对象编程(3)——事件和响应
文章目录
- 4 事件和响应
- 4.1 事件
- 4.2 发布者通知观察者,但不传递消息
- 4.3 发布者通知观察者,并且传递消息
- 4.4 删除listener
4 事件和响应
4.1 事件
事件(event)和响应(responses)一般用在对象之间的相互传递信息。MATLAB内部句柄类自动继承了事件响应相关功能。
- 定义事件和监听事件
事件机制相关的方法:addlistener和notify
classdef DataSource < handle%...空类events % 定义事件dataChangeedendmethodsfunction internalDataChange(obj)obj.notify('dataChanged');endend
end
通过addlistener 用来构造监听者,响应函数可以是普通函数、成员方法、静态方法。
lh = addlistener(eventObject,'EventName',@functionName)
lh = addlistener(eventObject,'EventName',@Obj.methodName)
lh = addlistener(eventObject,'EventName',@ClassName.methodName)
@后接响应函数的接口,函数的必须至少接受两个输入,第一个是发布者对象(src),第二个是事件的数据(eventdata)本身也是一个对象,定制向监听者传递数据。
监听者(listener)实现Publisher和Observer之间的解耦合。
- 使用事件机制的原因
假设无event和notify机制,DataSource类的对象在数据改变之后可以通知其观察对象: - 要知道哪些对象需要得到数据更新的通知;
- 知道监听对象的响应函数名字,并进行调用;
function broadcastDataChanged(obj,observerObj1,observerObj2)%数据发生变化someFunction(); %调用普通相应函数observerObj1.response(); %调用观察者1的响应函数observerObj2.response();%2end
- 响应函数response和update之间是硬编码;
- DataSource和观察者之间的耦合过于紧密;
- 假设100个观察者,调用100个函数
4.2 发布者通知观察者,但不传递消息
回调函数分为:普通函数、类的静态方法和普通成员方法。
clear all;clc;
p = DataSource();
o = Observer();
p.addlistener('dataChangedSimple',@updateViewSimpleFunction);
p.addlistener('dataChangedSimple',@Observer.updateViewStatic);
p.addlistener('dataChangedSimple',@o.updateView);p.notify('dataChangedSimple');
通知顺序是不确定的,外部程序不应对通知顺序有依赖。
4.3 发布者通知观察者,并且传递消息
classdef TimeStamp < event.EventDatapropertiests %时间戳对象内部封装endmethodsfunction obj = TimeStamp()tempTime = clock;obj.ts = ['(' num2str(tempTime(4),'%02.0f') ':'...num2str(tempTime(4),'%02.0f') ':'...num2str(tempTime(4),'%02.0f') ')'];endend
end
classdef DataSourcePublisher < handleeventsdataChangedendmethods% 数据改变发生,发布者通知各个观察者,function queryData(obj) %query the hardware, data changedobj.notify('dataChanged',TimeStamp());endend
end
clear all;clc;
p = DataSourcePublisher();
o = Observer();
p.addlistener('dataChanged',@updateViewStampFunc);
p.addlistener('dataChanged',@Observer.updateViewStatic);
p.addlistener('dataChanged',@o.updateView);
p.queryData();
可以实现通知和消息传递功能。
event.EventData类是handle类,可以用于传递大型数据。
classdef Message < event.EventDatapropertiesmatrixendmethodsfunction obj = Message(internalData)obj.matrix = internalData; %假设。。为矩阵endend
end
function queryData(obj)% 数据发生改变msgObj = Message(obj.internalData);obj.notify('dataChanged',msgObj);
end
4.4 删除listener
listener对象本身是handle类,注销一个listener时,只需要调用handle类的delete方法即可。
基于MATLAB的面对对象编程(3)——事件和响应相关推荐
- 基于java面对对象编程范式笔记
https://www.icourse163.org/learn/NJU-1002246017?tid=1002791118#/learn/content 科学思维&工程思维 科学思维:限制条 ...
- 易语言java类_易语言面对对象编程
易语言面对对象编程---类的创建与使用 面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多,如:C++.JAVA等等.易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始 ...
- java面对对象编程
因为这直接关系到你阅读设计模式的速度和理解质量. 接下来我将简单介绍java中面对对象编程的一些基础知识. 1,类和修饰符 public class ClassTest{public ClassTes ...
- 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性
一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...
- SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理
SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...
- 螺杆泵matlab,基于Matlab与VC++混合编程的螺杆泵转子型线设计
2011年第 3期 (总 227期 ) · 1 · 收稿日期: 2010 - 12 - 23 基金项目:国家高技术研究发展计划资助项目 (2007AA05Z208) 设计研究 文章编号: 100622 ...
- matlab 简单算例,(简单算例)基于Matlab的电力系统潮流编程计算.pdf
(简单算例)基于Matlab的电力系统潮流编程计算 基于Matlab的电力系统潮流编程计算 口黄扬威吴喜春郭志峰张斯翔 (三峡大学电气与新能源学院湖北·宜昌443002) 摘要:通过介绍电力系统的实际 ...
- 电气潮流运算Matlab怎么编程,基于Matlab的电力系统潮流编程计算
计算技术 信息发展 与 64 -- 科协论坛 · 2011 年第 6 期(下) -- 基于 Matlab 的电力系统潮流编程计算 □ 黄扬威 吴喜春 郭志峰 张斯翔 (三峡大学电气与新能源学院 湖北· ...
- java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...
Java视频教程名称:java面对对象编程-俄罗斯方块视频教程 俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...
最新文章
- k8s mysql operator_将 MySQL 通过 presslabs/mysql-operator 部署到 k8s 内部
- MySQL分库分表环境下全局ID生成方案
- 机器视觉:图像与视频朝向检测
- linux gnome 桌面,GNOME Linux桌面
- 使用nmcli 实现 bond0 网络组 网桥三种模式
- 几本人工智能入门书籍
- 42 WM配置-作业-库存盘点-定义默认设置
- JA-SIG(CAS)学习笔记1
- libevent源码深度剖析三
- CentOS 7伪分布式方式安装Hadoop-2.6.0-cdh5.6.0并且通过主机浏览器访问hadoop工作台
- 面向机器学习的自然语言标注1.2 语料库语言学简史
- linux rz sz putty,PuTTY xshell rz sz命令实现上传下载到windows的方法
- CodeForces-721A-One-dimensional Japanese Crossword
- 中学计算机课小课题,中学信息技术课题题目
- 项目管理中风险控制的策略
- 【Unity 资源分享】☀️ | Unity 超好看的 精品四季蔚蓝自然场景模型 ,让我们离二次元开发更近一步!
- [BZFZ友谊赛]火山喷发
- 怎样进行电路的抗干扰设计
- 【MDX】一文带你搞懂SQL Server Analysis Services 的安装和使用
- 超市管理系统Java