MATLAB面向对象编程学习笔记----事件和响应

本系列内容为《MATLAB面向对象编程–从入门到设计模式》学习笔记,特此说明。

事件

事件泛指对象内部状态的改变。在MATLAB中,GUI编程经常使用事件机制。

e.g. GUI中一个按钮被按下就是一个事件,并且Button对象状态改变。

通常,事件会触发一些响应。

在事件发生和触发响应这样的模式中,通常把改变内部状态的对象叫作发布者,把监听事件并做出响应的对象叫作观察者。利用MATLAB OOP ,用户可以定义类的事件。一个发布者可以拥有多个事件,一个观察者可以监听多个事件。

事件和响应一般用来在对象之间相互传递信息,因为其应用广泛,故MATLAB在句柄基类内部就已经实现了这个功能。

任何定义的Handle类都已经继承了Handle 基类中与事件相关的功能,因此继承了Handle基类的类,查看该类所支持的方法,会发现其中有两个方法:addlistener 、 notify

定义事件和监听事件

MATLAB规定,事件的定义要放在event block 中。 

classdef Someclass < handle
    ......
    events            %event block开始
        DataChanged
    end               %event block结束
    ......
    function interalDataChange(obj)
        obj.notify('dataChanged'); %通知数据改变,各个GUI更新
    end
end

SomeClass类拥有继承自Handle基类的notify方法,该方法的作用是监视其数据变化的对象发布事件的消息。

Handle 类提供的event 和 notify 机制使得任何内部状态的改变都可以触发事件,发布者只需要调用notify 函数。

 

Handle 基类还提供了另一种方法,addlistener。

该方法用来在发布者处登记观察者,因为一个发布者可以拥有多个事件,所以登记监听者时,还要指定要监听的事件的名称。

为了统一接口,MATLAB创造了新的listener对象,在构造观察者时,只需要提供事件发生的响应函数。如果一个观察者想监听事件,则实际被登记的不是观察者,而是该观察者的响应函数。因此,普通函数也可以在发布者处登记。

方法addlistener用来构造监听者,登记的响应函数可以是普通函数:

%登记的响应函数为普通函数
lh = addlistener (eventObject,'EventName',@functionName)

%登记的响应函数为类的成员方法
lh = addlistener (event,'EventName',@obj.methodName)

%登记的响应函数为类的静态方法
lh = addlistener(eventObkect,'EventName',@CLassName.methodName)

tips:MATLAB固定了第三个参数,即响应函数的接口,规定该函数局部所指向的函数必须至少接受两个输入

第一个参数是发布者对象(src);

第二个参数时事件的数据(eventdata),其本身也是一个对象,可以定义这个对象的类,以定制向监听者传递的数据。

删除 listener

因为listener 对象本身是Handle类对象,所以只要在创建listener时记得保存其Handle,在删除(注销)一个listener时,只需要调用Handle基类提供的delete方法即可。

 

你可能感兴趣的:(MATLAB,GUI,笔记,MATLAB)