php設(shè)計(jì)模式之觀察者模式定義與用法經(jīng)典示例
本文實(shí)例講述了php設(shè)計(jì)模式之觀察者模式定義與用法。分享給大家供大家參考,具體如下:
<?php /** * @desc 利用觀察者模式,實(shí)現(xiàn)不同用戶進(jìn)入顯示不同的內(nèi)容 * 1.主題 * 2.觀察者接口 * 3.觀察者 * ***/ interface Observer{ //添加觀察者對(duì)象 public function attach($observer); //刪除觀察者對(duì)象 public function detach($observer); //執(zhí)行觀察者需要執(zhí)行的方法 public function doIt(); } class User implements Observer{ public $obj = []; /* *@desc 傳遞的對(duì)象不在存儲(chǔ)的obj對(duì)象中則將對(duì)象存儲(chǔ)到obj中 */ public function attach($observer){ if(!in_array($observer,$this->obj)){ $this->obj[] = $observer; } } /** * @desc 取消觀察者觀察 * **/ public function detach($observer){ $key = array_search($observer, $this->obj); if($key){ unset($this->obj[$key]); } } /*** * @desc 獲取所有被觀察者的對(duì)象,執(zhí)行觀察 * **/ public function doIt(){ if(!empty($this->obj)){ foreach ($this->obj as $v){ $v->active(); } } } } /** * @desc 觀察者接口 * **/ interface obsUser{ public function active(); } /* * @實(shí)現(xiàn)零售店用戶實(shí)現(xiàn)方法類 * **/ class storeUser implements obsUser{ public function active(){ echo "我是零售店用戶\n"; } } /** * @desc 實(shí)現(xiàn)經(jīng)銷商用戶方法類 * **/ class supplierUser implements obsUser{ public function active(){ echo "我是經(jīng)銷商用戶\n"; } } /* * 實(shí)例化觀察者接口類 * **/ $user = new User(); //添加門店用戶類到觀察者對(duì)象 $user->attach(new storeUser()); //添加經(jīng)銷商用戶類到觀察者對(duì)象 $user->attach(new supplierUser()); //監(jiān)控觀察者動(dòng)作并輸出結(jié)果 $user->doIt();
運(yùn)行結(jié)果:
我是零售店用戶
我是經(jīng)銷商用戶
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP中針對(duì)區(qū)域語(yǔ)言標(biāo)記信息的操作
大家都知道Locale 類就是操作區(qū)域語(yǔ)言相關(guān)內(nèi)容的,它無(wú)法被實(shí)例化,所有全部功能方法都是靜態(tài)的。接下來通過本文給大家分享PHP中針對(duì)區(qū)域語(yǔ)言標(biāo)記信息的操作,需要的朋友參考下吧2021-07-07Laravel學(xué)習(xí)基礎(chǔ)之migrate的使用教程
這篇文章主要給大家介紹了關(guān)于Laravel學(xué)習(xí)基礎(chǔ)之migrate使用的相關(guān)資料,文中通過示例代碼介紹非常詳細(xì),分別介紹了生成遷移、遷移結(jié)構(gòu)、運(yùn)行遷移和回滾遷移等實(shí)現(xiàn)的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10PHP中使用FFMPEG獲取視頻縮略圖和視頻總時(shí)長(zhǎng)實(shí)例
這篇文章主要介紹了PHP中使用FFMPEG獲取視頻縮略圖和視頻總時(shí)長(zhǎng)實(shí)例,需要的朋友可以參考下2014-05-05ThinkPHP采用原生query實(shí)現(xiàn)關(guān)聯(lián)查詢left join實(shí)例
這篇文章主要介紹了ThinkPHP采用原生query實(shí)現(xiàn)關(guān)聯(lián)查詢left join的方法,實(shí)例展示了ThinkPHP中query方法的使用技巧,需要的朋友可以參考下2014-12-12Zend Framework創(chuàng)建自己的動(dòng)作助手詳解
這篇文章主要介紹了Zend Framework創(chuàng)建自己的動(dòng)作助手實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了基于助手的抽象基類Zend_Controller_Action_Helper_Abstract實(shí)現(xiàn)自定義動(dòng)作助手的相關(guān)技巧,需要的朋友可以參考下2016-03-03Yii2-GridView 中讓關(guān)聯(lián)字段帶搜索和排序功能示例
這篇文章主要介紹了Yii2-GridView 中讓關(guān)聯(lián)字段帶搜索和排序功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01