溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

PHP設(shè)計(jì)模式之觀察者模式

發(fā)布時(shí)間:2020-08-01 02:56:12 來(lái)源:網(wǎng)絡(luò) 閱讀:289 作者:小海哥2010 欄目:web開(kāi)發(fā)

觀察者模式可以這么理解,比如說(shuō)一個(gè)辦公室里的員工,都有炒股的愛(ài)好。而項(xiàng)目經(jīng)理經(jīng)常出差不在辦公室,所以他們除了工作就可以進(jìn)行炒股,但是為了避免經(jīng)理回來(lái)時(shí)看到,所以他們需要知道經(jīng)理什么時(shí)候回來(lái)進(jìn)辦公室。于是他們可以跟前臺(tái)聯(lián)合,如果經(jīng)理回來(lái),那么前臺(tái)只需要給其中一人打電話,那么所有人就知道經(jīng)理回來(lái)了。如果把經(jīng)理回來(lái)當(dāng)做一個(gè)對(duì)像,各個(gè)員工當(dāng)做一個(gè)對(duì)像。那么當(dāng)經(jīng)理回來(lái)這個(gè)對(duì)像狀態(tài)改變時(shí),各個(gè)員工對(duì)象的狀態(tài)都發(fā)生相應(yīng)的改變。

所謂觀察者模式,即是定義對(duì)像間的一種一對(duì)多的依賴(lài)關(guān)系。以便一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴(lài)于它的對(duì)像都能得到通知并自動(dòng)改變狀態(tài)。

這里我們可以以老板和員工為例:

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();

這里不是應(yīng)用了繼承的方式,而是組合的方式,將觀察者各個(gè)對(duì)象組合到Boss這個(gè)主題中。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI