MATLAB OOP 中的事件与作为触发事件 ( ) 源的句柄对象相关联notify
。如果没有触发您感兴趣的事件的对象,则无法注册事件处理程序 ( addlistener
)。
根据类如何适合您的应用程序,也许在您的情况下您可以实现单例模式:
我的班级.m
classdef MyClass < handle
events
Update
end
%# private constructor
methods (Access = private)
function obj = MyClass()
end
end
methods (Static)
%# restrict instantiation of class to one object
function obj = getInstance()
persistent inst;
if isempty(inst)
inst = MyClass();
end
obj = inst;
end
%# register event listener
function registerListener(f)
persistent lh;
if ~isempty(lh)
delete(lh);
end
lh = addlistener(MyClass.getInstance(), 'Update', f);
end
%# some function that will trigger the event
function func()
notify(MyClass.getInstance(), 'Update')
end
end
end
MATLAB
>> MyClass.func
>> MyClass.registerListener(@(o,e)disp('updated'))
>> MyClass.func
updated
>> MyClass.func
updated