您好,登錄后才能下訂單哦!
觀察者模式可以這么理解,比如說一個辦公室里的員工,都有炒股的愛好。而項目經理經常出差不在辦公室,所以他們除了工作就可以進行炒股,但是為了避免經理回來時看到,所以他們需要知道經理什么時候回來進辦公室。于是他們可以跟前臺聯合,如果經理回來,那么前臺只需要給其中一人打電話,那么所有人就知道經理回來了。如果把經理回來當做一個對像,各個員工當做一個對像。那么當經理回來這個對像狀態改變時,各個員工對象的狀態都發生相應的改變。
所謂觀察者模式,即是定義對像間的一種一對多的依賴關系。以便一個對象的狀態發生改變時,所有依賴于它的對像都能得到通知并自動改變狀態。
這里我們可以以老板和員工為例:
interface Boss{ public function attach(Observer $observer); public function detach(Observer $observer); public function notifyMsg(); } interface Observer{ public function change(); } class Secretary implements Boss{ private $observers = array(); public function attach(Observer $observer){ if(!in_array($observer,$this->observers)){ $this->observers[]=$observer; } } public function detach(Observer $observer){ if($index=array_search($observer,$this->observers)){ unset($this->observers[$index]); } } public function notifyMsg(){ foreach($this->observers as $observer){ $observer->change(); } } } class Observer1 implements Observer{ public function change(){ echo 'Continue to work!'; } } class Observer2 implements Observer{ public function change(){ echo 'Go to toilet'; } } $Secretary =new Secretary(); $observer1 =new Observer1(); $observer2 =new Observer2(); $Secretary->attach($observer1); $Secretary->attach($observer2); $Secretary->notifyMsg();
這里不是應用了繼承的方式,而是組合的方式,將觀察者各個對象組合到Boss這個主題中。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。