基于MATLAB的面对对象编程(3)——事件和响应
生活随笔
收集整理的這篇文章主要介紹了
基于MATLAB的面对对象编程(3)——事件和响应
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 4 事件和響應
- 4.1 事件
- 4.2 發布者通知觀察者,但不傳遞消息
- 4.3 發布者通知觀察者,并且傳遞消息
- 4.4 刪除listener
4 事件和響應
4.1 事件
事件(event)和響應(responses)一般用在對象之間的相互傳遞信息。MATLAB內部句柄類自動繼承了事件響應相關功能。
- 定義事件和監聽事件
事件機制相關的方法:addlistener和notify
通過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類的對象在數據改變之后可以通知其觀察對象: - 要知道哪些對象需要得到數據更新的通知;
- 知道監聽對象的響應函數名字,并進行調用;
- 響應函數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類,可以用于傳遞大型數據。
4.4 刪除listener
listener對象本身是handle類,注銷一個listener時,只需要調用handle類的delete方法即可。
總結
以上是生活随笔為你收集整理的基于MATLAB的面对对象编程(3)——事件和响应的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于MATLAB的面向对象编程(1)——
- 下一篇: 基于MATLAB的面向对象编程(4)——