對於觀察者模式,我們可能不是那麼耳熟聞詳,它是一種事件系統,意味著這個模式允許某個類別觀察另一一個類別的狀態,當被觀察的類別狀態改變的時候,觀察類別可以收到通知並且做出相應的動作;觀察者模式提供了避免組件之間緊密耦合的另一種方法;因此我們就一起來本篇文章討論什麼是觀察者模式吧!
相關推薦:PHP中什麼是工廠模式以及工廠方法模式?
觀察者:
它是一種事件系統,意味著這個模式允許某個類別觀察另一個類別的狀態,當被觀察的類別狀態改變的時候,觀察類別可以收到通知並且做出相應的動作;觀察者模式提供了避免元件之間緊密耦合的另一種方法;
我們還是以程式碼為例,我們新建一個文件,然後定義一個類,然後在類裡面寫入一個成員屬性,他是一個數組用來存放觀察者,緊接著我們在定義一個方法,這個方法是用來存放觀察者和加入觀察者的,當被觀察者做出行為的時候,讓觀察者得到通知,並且做出一定反應,程式碼為例:
<?php class Man { //用来存放观察者 protected $observers = []; //添加观察者方法 function addObserver($observer) { $this->observers[]=$observer; } //花钱方法 function buy() { //当被观察者做出这个行为的时候,让观察者得到通并且做出一-定的反应 foreach ($this->observers as $girl) { $girl->pome(); } } } class GirlFriend { function pome() { echo'我只明白一件事,爱一个人,是那么痛苦<br />'; } } //创建对象 $xiaoming = new Man(); $xiaohua =new GirlFriend(); $xiaoli = new GirlFriend(); //添加观察者 $xiaoming->addObserver( $xiaohua); $xiaoming->addObserver($xiaoli); $xiaoming->buy();
運行結果如下:
#有新增觀察者這樣一個方法,那就有刪除觀察者的方法,因此我們還要加入一個刪除觀察者的方法,
function delObserver($observer) { //查找对应值在数组中的键 $key = array_search($observer,$this->observers); //根据键删除值,并且数组重新索引 array_splice($this->observers, $key, 1); } }
//刪除
$xiaoming->delObserver( $xiaohua);
程式碼如下:
推薦學習:《PHP影片教學》
以上是PHP中什麼是觀察者模式?如何運用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!