日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于MATLAB的面对对象编程(3)——事件和响应

發布時間:2025/4/5 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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)——事件和响应的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。