您好,登錄后才能下訂單哦!
PHP設計模式-觀察者
一個對象狀態發生改變后,會影響到其他幾個對象的改變,這時候可以用觀察者模式。一個對象通過添加一個attach方法允許觀察者注冊自己,使本身變得可觀察。當被觀察的對象更改時,它會將消息發送到已注冊的觀察者。觀察者使用該信息執行的操作與被觀察的對象無關。觀察者模式是一種事件系統,意味著這一模式允許某些類通過觀察被觀察類的狀態變化,做出相應的動作。
觀察者模式UML圖
php5中提供了觀察者observer與被觀察者subject接口
interface SplSubject
{
function attach(SplObserver $observer);
function detach(SplObserver $observer);
function notify();
}
interface SqlObserver
{
function update(SplSubject $subject);
}
例子如下:
<?php class user implements SplSubject{ public $lognum; public $hobby; protected $observers; public function __construct($hobby){ $this->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(); ?>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。