Matlab观察者模式
要点:
1、服务端(Subject)维护一个观察者的列表,以便能够向所有的观察者(Observer)推送信息
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。2、观察者可以获取服务端的状态
3、服务端和观察者可抽象,可以有多个不同实现
Subject.m
classdef Subject < handle properties(Access = private) observers = Observer.empty(); end methods function add(obj,observer) obj.observers(end + 1) = observer; end function rm(obj,observer) index = [obj.observers] ~= observer; obj.observers = obj.observers(index); end function notify(obj) for i= 1:length(obj.observers) obj.observers(i).update(obj); end end end end
ConcreteSubject.m
classdef ConcreteSubject < Subject properties(Access = public) news end methods function set.news(obj,news) obj.news = news; end function news = get.news(obj) news = obj.news; end end end
Observer.m
classdef Observer < handle & matlab.mixin.Heterogeneous methods(Abstract) update(~,~); end methods(Sealed) function res = eq(obj1,obj2) res = eq@handle(obj1,obj2); end function res = ne(obj1,obj2) res = ne@handle(obj1,obj2); end end end
ConcreteObserver1.m
classdef ConcreteObserver1 < Observer properties name end methods function obj = ConcreteObserver1(name) obj.name = name; end function update(obj,subject) disp([obj.name, ' has got subject news: ',subject.news]); end end end
ConcreteObserver2.m
classdef ConcreteObserver2 < Observer properties name end methods function obj = ConcreteObserver2(name) obj.name = name; end function update(obj,subject) disp([obj.name, ' has received subject news: ',subject.news ]); end end end
测试代码:
sub = ConcreteSubject(); sub.news = 'hello matlab'; o1 = ConcreteObserver1('obs:a'); o2 = ConcreteObserver2('obs:b'); sub.add(o1); sub.add(o2); sub.notify(); sub.rm(o1); sub.news = 'hello observer pattern'; sub.notify();

更多精彩