婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > PHP 觀察者模式深入理解與應(yīng)用分析

PHP 觀察者模式深入理解與應(yīng)用分析

熱門標(biāo)簽:聊城電話外呼系統(tǒng)公司 銅川電話機(jī)器人價(jià)格 沛縣400電話辦理 智能電話機(jī)器人好公司門薩維 辦理重慶400電話 江蘇電商外呼系統(tǒng)運(yùn)營(yíng)商 AI電話機(jī)器人OEM貼牌 德陽(yáng)中江如何申請(qǐng)400開(kāi)頭電話 青白江地圖標(biāo)注

本文實(shí)例講述了PHP 觀察者模式。分享給大家供大家參考,具體如下:

用模式開(kāi)發(fā)的優(yōu)點(diǎn)是,能讓我們的邏輯結(jié)構(gòu)以及代碼更加清晰,便于維護(hù)!

而我們?yōu)槭裁匆?“觀察者模式”?這就需要從實(shí)際運(yùn)用中來(lái)理解才能更好的運(yùn)用!用如下的情境來(lái)說(shuō)明吧。

事例,開(kāi)始時(shí)我被安排做項(xiàng)目的登錄,很快我就完成了。然后產(chǎn)品提出了另一個(gè)需求,用戶登錄后,給他們推送一條實(shí)時(shí)消息!然后我在登錄成功的邏輯后加了一段代碼,完成了登錄后的實(shí)時(shí)消息推送。然而事情還沒(méi)有完,產(chǎn)品又給加了個(gè)需求,需要給新登錄的用戶10塊錢紅包獎(jiǎng)勵(lì),這個(gè)當(dāng)然很簡(jiǎn)單,我又在消息推送后加了代碼,完成了新登錄用戶的紅包獎(jiǎng)勵(lì)(錢怎么到賬的過(guò)程暫且不論),然而事情還沒(méi)完沒(méi)了了,產(chǎn)品不斷的在加需求了,如非vip用戶登錄,給他推送10條需要注冊(cè)VIP才能打開(kāi)的信息,如根據(jù)客戶習(xí)慣推送10條客戶偏好的信息,如vip快到期的客戶需要在客戶登錄后提醒要充值啦。。。。。。。等等,如是這般,那我就得不停的在登錄后加代碼,變得我開(kāi)始看不懂哪個(gè)xxx寫的代碼了!

那么此時(shí)我們就得考慮用‘觀察者模式'了

可以以這樣的方式簡(jiǎn)單明了形容 觀察者模式, 某個(gè)商場(chǎng)門口安排一個(gè)人進(jìn)行觀察,觀察到有a類型的顧客進(jìn)門,立即安排敲鑼、打鼓、送鮮花,觀察到有b類客戶,立即安排購(gòu)物袋,觀察到c類客戶,嗯嗯感覺(jué)他是來(lái)打醬油了,安排不要浪費(fèi)表情了,什么歡迎儀式也沒(méi)有。。。。。也就是說(shuō) 觀察者就是個(gè)‘勢(shì)利眼',看人下彩,根據(jù)觀察給進(jìn)來(lái)的顧客安排對(duì)應(yīng)的某個(gè)服務(wù)或者某些服務(wù)!也許這個(gè)形容還不夠恰當(dāng),但大體意思差不多了。

接下來(lái)就是重點(diǎn)了,描述了觀察者模式的輪廓,那么就需要轉(zhuǎn)化為代碼來(lái)實(shí)際運(yùn)用了!

一、首先得有兩個(gè)接口類,用以框定觀察者模式,

一個(gè)被觀察者接口類(一般申明有三個(gè)必須方法:1.添加觀察者對(duì)象的方法,2.刪除觀察者對(duì)象的方法 ,3.通知觀察者進(jìn)行  相應(yīng)執(zhí)行的方法),

一個(gè)觀察者接口類(一般只有一個(gè)必須方法,就是執(zhí)行)

如果直接甩代碼可能有點(diǎn)難理解,那么就先給個(gè)示意圖來(lái)明確一下吧!

二、根據(jù)觀察者接口類的框定我們定下接口類如下代碼:

(示例是網(wǎng)上抄的,因?yàn)橐子诶斫?,申明一下出處,網(wǎng)址:https://www.jb51.net/article/170753.htm):

?php
// 被觀察者接口
interface Subject{
  public function register(Observer $observer); //添加(注冊(cè))觀察者對(duì)象
  public function detach(Observer $observer);  //刪除觀察者對(duì)象
  public function notify();           //通知觀察者執(zhí)行相應(yīng)功能
}
// 觀察者接口
interface Observer{
  public function watch();  //觀察者要執(zhí)行的方法
}

三、根據(jù)框定的結(jié)構(gòu),大概的理解一下就是,要實(shí)現(xiàn) 被觀察者對(duì)象 存儲(chǔ)各種觀察者對(duì)象(完成各種功能的對(duì)象)存儲(chǔ)起來(lái),然后通只各觀察者執(zhí)行自己的功能,先看看如下的實(shí)現(xiàn)代碼

?php
// 被觀察者繼承類
class Action implements Subject{
   public $_observers=array(); //用于存儲(chǔ)觀察者對(duì)象
   //用于添加(注冊(cè))觀察者對(duì)象
   public function register(Observer $observer){
     $this->_observers[]=$observer;
   }
   //用于刪除觀察者對(duì)象
   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(){
     //****重點(diǎn),其實(shí)就是循環(huán)中執(zhí)行各觀察這對(duì)象的watch方法,不同功能方法內(nèi)容不同但方法名相同
     foreach ($this->_observers as $observer) {
       $observer->watch();
     }
   }
 }
// cat觀察者繼承類
class Cat implements Observer{
   public function watch(){
     echo "Cat watches TVhr/>";
   }
 } 
 //dog觀察者繼承類
 class Dog implements Observer{
   public function watch(){
     echo "Dog watches TVhr/>";
   }
 } 
 //people觀察者繼承類
 class People implements Observer{
   public function watch(){
     echo "People watches TVhr/>";
   }
 }

好了,我們現(xiàn)在通過(guò)上面的繼承就能明白了,觀察者就是定義各種功能的對(duì)象(這些對(duì)象就是:比如給第一次登錄的用戶發(fā)紅包,給用戶最新的10條文章推送,給非vip用戶推送10條需要注冊(cè)才能打開(kāi)的視頻誘導(dǎo)用戶開(kāi)通vip。。。。),被觀察者對(duì)象要實(shí)現(xiàn)的就是 將添加(注冊(cè))的觀察者對(duì)象存儲(chǔ)起來(lái)并逐個(gè)通知執(zhí)行觀察者各自的功能,

四、那么就進(jìn)行實(shí)例化對(duì)象進(jìn)行操作了!代碼如下:

// 應(yīng)用實(shí)例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();

到這里我想如果應(yīng)該是有所理解了,如果我的理解有誤請(qǐng)?zhí)峤ㄗh,當(dāng)然這只是觀察者模式的一個(gè)簡(jiǎn)單過(guò)程,實(shí)際開(kāi)發(fā)中會(huì)有所改動(dòng),當(dāng)然大體脈絡(luò)就是這樣的!

還有一點(diǎn)個(gè)人的觀點(diǎn)是,如果我們需要搞清楚各種開(kāi)發(fā)模式運(yùn)用,那么就要從它能解決的需求理解,面向?qū)ο缶幊趟莵?lái)源于生活,應(yīng)用于生活的,從這種模式解決的需求上進(jìn)行理解,然后我們才能明白架構(gòu)定義出來(lái)的代碼(說(shuō)得玄一點(diǎn)就是將 想法轉(zhuǎn)化為代碼來(lái)實(shí)現(xiàn),通過(guò)代碼 得到我們想要的結(jié)果) 。寫下這些其實(shí)也不為其他,只是想加深自己的印象,同時(shí)也希望對(duì)其他 同行的朋友有所助益!

更多關(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常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用案例詳解
  • php模式設(shè)計(jì)之觀察者模式應(yīng)用實(shí)例分析
  • PHP使用觀察者模式處理異常信息的方法詳解
  • php設(shè)計(jì)模式之觀察者模式定義與用法經(jīng)典示例
  • PHP中常用的三種設(shè)計(jì)模式詳解【單例模式、工廠模式、觀察者模式】
  • PHP觀察者模式實(shí)例分析【對(duì)比JS觀察者模式】
  • PHP設(shè)計(jì)模式之觀察者模式定義與用法分析
  • PHP觀察者模式定義與用法實(shí)例分析
  • 解析PHP觀察者模式Observer

標(biāo)簽:赤峰 鷹潭 三亞 南寧 迪慶 烏魯木齊 山南 濟(jì)寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP 觀察者模式深入理解與應(yīng)用分析》,本文關(guān)鍵詞  PHP,觀察者,模式,深入,理解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP 觀察者模式深入理解與應(yīng)用分析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP 觀察者模式深入理解與應(yīng)用分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 二连浩特市| 竹北市| 隆回县| 新巴尔虎左旗| 阳信县| 夏河县| 达孜县| 永胜县| 定远县| 湘西| 城步| 德格县| 张家口市| 博罗县| 珲春市| 工布江达县| 济源市| 绩溪县| 安图县| 五大连池市| 华宁县| 淮安市| 乐亭县| 峨山| 井研县| 蓬莱市| 晋城| 稻城县| 忻城县| 修武县| 米脂县| 十堰市| 扶沟县| 威海市| 鄂尔多斯市| 惠水县| 崇阳县| 潼关县| 宜昌市| 蓬莱市| 蓬安县|