PHP設(shè)計(jì)模式-觀察者
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供淮安網(wǎng)站建設(shè)、淮安做網(wǎng)站、淮安網(wǎng)站設(shè)計(jì)、淮安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、淮安企業(yè)網(wǎng)站模板建站服務(wù),十年淮安做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
一個(gè)對(duì)象狀態(tài)發(fā)生改變后,會(huì)影響到其他幾個(gè)對(duì)象的改變,這時(shí)候可以用觀察者模式。一個(gè)對(duì)象通過(guò)添加一個(gè)attach方法允許觀察者注冊(cè)自己,使本身變得可觀察。當(dāng)被觀察的對(duì)象更改時(shí),它會(huì)將消息發(fā)送到已注冊(cè)的觀察者。觀察者使用該信息執(zhí)行的操作與被觀察的對(duì)象無(wú)關(guān)。觀察者模式是一種事件系統(tǒng),意味著這一模式允許某些類(lèi)通過(guò)觀察被觀察類(lèi)的狀態(tài)變化,做出相應(yīng)的動(dòng)作。
觀察者模式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{ } } } //實(shí)施觀察 $user= new user("sports"); $user->attach(new secrity()); $user->attach(new ad()); $user->login(); ?>