您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在PHP項目中應(yīng)用觀察者模式,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
一、首先得有兩個接口類,用以框定觀察者模式,
一個被觀察者接口類(一般申明有三個必須方法:1.添加觀察者對象的方法,2.刪除觀察者對象的方法 ,3.通知觀察者進行 相應(yīng)執(zhí)行的方法),
一個觀察者接口類(一般只有一個必須方法,就是執(zhí)行)
如果直接甩代碼可能有點難理解,那么就先給個示意圖來明確一下吧!
二、根據(jù)觀察者接口類的框定我們定下接口類如下代碼:
(示例是網(wǎng)上抄的,因為易于理解,申明一下出處,網(wǎng)址:https://www.jb51.net/article/170753.htm):
<?php // 被觀察者接口 interface Subject{ public function register(Observer $observer); //添加(注冊)觀察者對象 public function detach(Observer $observer); //刪除觀察者對象 public function notify(); //通知觀察者執(zhí)行相應(yīng)功能 } // 觀察者接口 interface Observer{ public function watch(); //觀察者要執(zhí)行的方法 }
三、根據(jù)框定的結(jié)構(gòu),大概的理解一下就是,要實現(xiàn) 被觀察者對象 存儲各種觀察者對象(完成各種功能的對象)存儲起來,然后通只各觀察者執(zhí)行自己的功能,先看看如下的實現(xiàn)代碼
<?php // 被觀察者繼承類 class Action implements Subject{ public $_observers=array(); //用于存儲觀察者對象 //用于添加(注冊)觀察者對象 public function register(Observer $observer){ $this->_observers[]=$observer; } //用于刪除觀察者對象 public function detach(Observer $observer){ $index = array_search($observer, $this->_observers); if ($index === FALSE || ! array_key_exists($index, $this->_observers)) { return FALSE; } unset($this->_observers[$index]); return TRUE; } //通知各觀察者 public function notify(){ //****重點,其實就是循環(huán)中執(zhí)行各觀察這對象的watch方法,不同功能方法內(nèi)容不同但方法名相同 foreach ($this->_observers as $observer) { $observer->watch(); } } } // cat觀察者繼承類 class Cat implements Observer{ public function watch(){ echo "Cat watches TV<hr/>"; } } //dog觀察者繼承類 class Dog implements Observer{ public function watch(){ echo "Dog watches TV<hr/>"; } } //people觀察者繼承類 class People implements Observer{ public function watch(){ echo "People watches TV<hr/>"; } }
好了,我們現(xiàn)在通過上面的繼承就能明白了,觀察者就是定義各種功能的對象(這些對象就是:比如給第一次登錄的用戶發(fā)紅包,給用戶最新的10條文章推送,給非vip用戶推送10條需要注冊才能打開的視頻誘導(dǎo)用戶開通vip。。。。),被觀察者對象要實現(xiàn)的就是 將添加(注冊)的觀察者對象存儲起來并逐個通知執(zhí)行觀察者各自的功能,
四、那么就進行實例化對象進行操作了!代碼如下:
// 應(yīng)用實例 $action=new Action(); $action->register(new Cat()); $action->register(new People()); $action->register(new Dog()); $action->notify();
關(guān)于如何在PHP項目中應(yīng)用觀察者模式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。