文章目录

  • 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)——事件和响应相关推荐

  1. 基于java面对对象编程范式笔记

    https://www.icourse163.org/learn/NJU-1002246017?tid=1002791118#/learn/content 科学思维&工程思维 科学思维:限制条 ...

  2. 易语言java类_易语言面对对象编程

    易语言面对对象编程---类的创建与使用 面对对象编程,可以说是当前最流行的编程方式,当前流行的面对对象的编程语言很多,如:C++.JAVA等等.易语言3.8版推出后,同样紧跟编程语言发展的方向,也开始 ...

  3. java面对对象编程

    因为这直接关系到你阅读设计模式的速度和理解质量. 接下来我将简单介绍java中面对对象编程的一些基础知识. 1,类和修饰符 public class ClassTest{public ClassTes ...

  4. 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性

    一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...

  5. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  6. 螺杆泵matlab,基于Matlab与VC++混合编程的螺杆泵转子型线设计

    2011年第 3期 (总 227期 ) · 1 · 收稿日期: 2010 - 12 - 23 基金项目:国家高技术研究发展计划资助项目 (2007AA05Z208) 设计研究 文章编号: 100622 ...

  7. matlab 简单算例,(简单算例)基于Matlab的电力系统潮流编程计算.pdf

    (简单算例)基于Matlab的电力系统潮流编程计算 基于Matlab的电力系统潮流编程计算 口黄扬威吴喜春郭志峰张斯翔 (三峡大学电气与新能源学院湖北·宜昌443002) 摘要:通过介绍电力系统的实际 ...

  8. 电气潮流运算Matlab怎么编程,基于Matlab的电力系统潮流编程计算

    计算技术 信息发展 与 64 -- 科协论坛 · 2011 年第 6 期(下) -- 基于 Matlab 的电力系统潮流编程计算 □ 黄扬威 吴喜春 郭志峰 张斯翔 (三峡大学电气与新能源学院 湖北· ...

  9. java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...

    Java视频教程名称:java面对对象编程-俄罗斯方块视频教程  俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T  e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...

最新文章

  1. k8s mysql operator_将 MySQL 通过 presslabs/mysql-operator 部署到 k8s 内部
  2. MySQL分库分表环境下全局ID生成方案
  3. 机器视觉:图像与视频朝向检测
  4. linux gnome 桌面,GNOME Linux桌面
  5. 使用nmcli 实现 bond0 网络组 网桥三种模式
  6. 几本人工智能入门书籍
  7. 42 WM配置-作业-库存盘点-定义默认设置
  8. JA-SIG(CAS)学习笔记1
  9. libevent源码深度剖析三
  10. CentOS 7伪分布式方式安装Hadoop-2.6.0-cdh5.6.0并且通过主机浏览器访问hadoop工作台
  11. 面向机器学习的自然语言标注1.2 语料库语言学简史
  12. linux rz sz putty,PuTTY xshell rz sz命令实现上传下载到windows的方法
  13. CodeForces-721A-One-dimensional Japanese Crossword
  14. 中学计算机课小课题,中学信息技术课题题目
  15. 项目管理中风险控制的策略
  16. 【Unity 资源分享】☀️ | Unity 超好看的 精品四季蔚蓝自然场景模型 ,让我们离二次元开发更近一步!
  17. [BZFZ友谊赛]火山喷发
  18. 怎样进行电路的抗干扰设计
  19. 【MDX】一文带你搞懂SQL Server Analysis Services 的安装和使用
  20. 超市管理系统Java

热门文章

  1. python List,切片的用法
  2. 在Windows上以服务方式运行 MSOPenTech/Redis
  3. vim末行模式下相关操作+配置文件
  4. artTemplate使用
  5. 如果在安装32位oracle 客户端组件时的情况下以64位模式运行,将出现问题
  6. iOS 7 Searchbar右侧空白
  7. C# WinForm开发系列 - DataGridView A
  8. Jquery获取ckEditor的内容
  9. discuz在线人数的实现原理(Discuz6.1.0)
  10. 移动互联网服务客户端开发技巧 ( Webview及正则)