首頁 > 後端開發 > php教程 > php設計模式之———觀察者模式

php設計模式之———觀察者模式

WBOY
發布: 2016-08-08 09:25:34
原創
1000 人瀏覽過

觀察者模式

觀察者模式(Observer),當一個物件狀態改變時,依賴它的物件全部收到通知,並自動更新。

模式中的角色

  • 抽像被觀察者(抽象類,方便擴展)將觀察者對象存放在一個容器裡,該類提供一些接口,例如增加觀察者,撤銷觀察者,通知觀察者(notify )
  • 具體被觀察者(具體類,繼承被觀察者抽象類別) 存入需要通知的觀察者,當觀察者需要update時,調用notify方法
  • 抽象觀察者(接口或抽象類)為具體的觀察者提供更新的接口,當被觀察者通知時進行update
  • 具體觀察者(具體類,繼承或實現抽象觀察者) 實現抽象觀察者的接口,自動update

phpDemo

抽像被觀察者

<code><span><?php</span><span>abstract</span><span><span>class</span><span>EventGenerator</span>{</span><span>private</span><span>$observer_arr</span> = <span>array</span>();

    <span>/*
        添加观察者
     */</span><span>public</span><span><span>function</span><span>addObserver</span><span>( Observer <span>$observer</span>)</span>
    {</span><span>$this</span>->observer_arr[] = <span>$observer</span>;
    }

    <span>/*
        通知所有观察者
     */</span><span>public</span><span><span>function</span><span>notify</span><span>()</span>
    {</span><span>foreach</span> (<span>$this</span>->observer_arr <span>as</span><span>$observer</span>) 
        {
            <span>$observer</span>->update();
        }
    }

}
</span></code>
登入後複製

具體被觀察者

<code><span><span>class</span><span>Event</span><span>extends</span><span>EventGenerator</span>{</span><span>public</span><span><span>function</span><span>trigger</span><span>()</span>
    {</span><span>echo</span><span>'event happen!<br/>'</span>;
        <span>//当事件发生时,通知所有观察者</span><span>$this</span>->notify();
    }

}
</code>
登入後複製

抽象觀察者

<code><span><?php</span><span><span>interface</span><span>Observer</span>{</span><span>//自动更新</span><span><span>function</span><span>update</span><span>()</span>;</span>
}

</code>
登入後複製

具體觀察者

<code><span><span>class</span><span>Observer1</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer1 update<br/>'</span>;
    }
}

<span><span>class</span><span>Observer2</span><span>implements</span><span>Observer</span>{</span><span>//实现update方法</span><span>public</span><span><span>function</span><span>update</span><span>()</span>
    {</span><span>echo</span><span>'observer2 update<br/>'</span>;
    }
}

</code>
登入後複製

測試程式碼

<code><span>$obj</span> = <span>new</span> Event();
<span>//添加观察者</span><span>$obj</span>->addObserver(<span>new</span> Observer1());
<span>$obj</span>->addObserver(<span>new</span> Observer2());
<span>$obj</span>->trigger();
</code>
登入後複製

模式總結機制

    缺點:依賴關係並未完全解除,抽象通知者依舊依賴抽象的觀察者
  • 試用場景:1.當一個對象的改變需要給變其它對象時,而且它不知道具體有多少個對像有待改變時; 2.一個抽像某型有兩個方面,當其中一個方面依賴於另一個方面,這時用觀察者模式可以將這兩者封裝在獨立的對像中使它們各自獨立地改變和復用
  • 以上就介紹了php設計模式之———觀察者模式,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板