大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PHP设计模式-观察者
创新互联专业为企业提供淮安网站建设、淮安做网站、淮安网站设计、淮安网站制作等企业网站建设、网页设计与制作、淮安企业网站模板建站服务,十年淮安做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。一个对象通过添加一个attach方法允许观察者注册自己,使本身变得可观察。当被观察的对象更改时,它会将消息发送到已注册的观察者。观察者使用该信息执行的操作与被观察的对象无关。观察者模式是一种事件系统,意味着这一模式允许某些类通过观察被观察类的状态变化,做出相应的动作。
观察者模式UML图
php5中提供了观察者observer与被观察者subject接口
interface SplSubject
{
function attach(SplObserver $observer);
function detach(SplObserver $observer);
function notify();
}
interface SqlObserver
{
function update(SplSubject $subject);
}
例子如下:
lognum= rand(1,10); $this->hobby= $hobby; $this->observers=new SplObjectStorage(); } public function login(){ $this->notify(); } public function attach(SPLObserver $observer){ $this->observers->attach($observer); } public function detach(SPLObserver $observer){ $this->observers->detach($observer); } public function notify(){ $this->observers->rewind(); while($this->observers->valid){ $observer= $this->observers->current(); $observer->update($this); $this->observers->next(); } } } class secrity implements SPLObserver{ public function update(SplSubject $subject){ if($subject->lognum>=3){ }else{ } } } class ad implements SPLObserver{ public function update(SplSubject $subject){ if($subject->hobby=="sports"){ }else{ } } } //实施观察 $user= new user("sports"); $user->attach(new secrity()); $user->attach(new ad()); $user->login(); ?>