<?php// 观察者模式// PHP(SPL)原生支持/*类摘要SplSubject { abstract public void attach ( SplObserver $observer ); abstract public void detach ( SplObserver $observer ); abstract public void notify ( void );}SplObserver { abstract public void update ( SplSubject $subject );}SplObjectStorage implements Countable, Iterator, Serializable, Arrayaccess {} */class ConcreteSubject implements SplSubject{ PRivate $storage; public function __construct() { $this->storage = new SplObjectStorage(); } public function attach(SplObserver $obs) { $this->storage->attach($obs); } public function detach(SplObserver $obs) { $this->storage->detach($obs); } public function notify() { foreach($this->storage as $ol) { $ol->update($this); } } public function doAct() { echo 'DoAct ... <br/>'; $this->notify(); }}/** * concrete observer 1 */class Observer1 implements SplObserver{ public function update(SplSubject $sub) { echo 'Observer one updated! <br/>'; }}/** * concrete observer 2 */class Observer2 implements SplObserver{ public function update(SplSubject $sub) { echo 'Observer two updated! <br/>'; }}// test code$sub = new ConcreteSubject();$sub->attach(new Observer1()); //add observer$sub->attach(new Observer1());$sub->attach(new Observer2());$sub->doAct();
新闻热点
疑难解答
图片精选