PHP SPL 观察者模式

<p>PHP SPL模块中自带一个观察者模式,观察者模式是一个非常简单事件系统,包含两个或者更多交互的类,这个模式允许一个类观察另一个类的状态,当被观察的类发生变化的时候,这个模式会得到通知。</p><p>在观察者模式中,被观察的叫subject,而负责观察的类叫做observe,为了表达这些内容,SPL提供了SplSubject和SplObserver接口。</p><p>SplSubject接口;</p><pre class="brush:php;toolbar:false">classSplSubject{ /*Methods*/ publicattach(SplObserver$observer):void publicdetach(SplObserver$observer):void publicnotify():void }</pre><p>SplObserver接口;</p><pre class="brush:php;toolbar:false">interfaceSplObserver{ publicfuntionupdate(SplSubject$subject); }</pre><p>这个模式的概念是SplSubject类维护了一个特定状态,当这个状态发生变化时,它就会调用notify()方法。当调用notify()方法的时候,所有之前的使用的attach()方法注册的SplObserver实例的update()方法都会被调用。</p><p>代码:</p><pre class="brush:php;toolbar:false">classMyObserver1implementsSplObserver{ publicfunctionupdate(SplSubject$subject){ echo__CLASS__.&#39;-&#39;.$subject-&gt;getName(); } } classMyObserver2implementsSplObserver{ publicfunctionupdate(SplSubject$subject){ echo__CLASS__.&#39;-&#39;.$subject-&gt;getName(); } } classMySubjectimplementsSplSubject{ private$_observers; private$_name; publicfunction__construct($name){ $this-&gt;_observers=newSplObjectStorage(); $this-&gt;_name=$name; } publicfunctionattach(SplObserver$observer){ $this-&gt;_observers-&gt;attach($observer); } publicfunctiondetach(SplObserver$observer){ $this-&gt;_observers-&gt;detach($observer); } publicfunctionnotify(){ foreach($this-&gt;_observersas$observer){ $observer-&gt;update($this); } } publicfunctiongetName(){ return$this-&gt;_name; } } $observer1=newMyObserver1(); $observer2=newMyObserver2(); $subject=newMySubject(&quot;test&quot;); $subject-&gt;attach($observer1); $subject-&gt;attach($observer2); $subject-&gt;notify(); /* willoutput: MyObserver1-test MyObserver2-test */ $subject-&gt;detach($observer2); $subject-&gt;notify();</pre>
RangeTime:0.006345s
RangeMem:206.03 KB
返回顶部 留言