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

主頁 > 知識庫 > 解析PHP觀察者模式Observer

解析PHP觀察者模式Observer

熱門標簽:福州人工外呼系統(tǒng)哪家強 注冊400電話申請 新河科技智能外呼系統(tǒng)怎么樣 常州地圖標注服務商 釘釘打卡地圖標注 百度商鋪地圖標注 安裝電銷外呼系統(tǒng) 衡水外呼系統(tǒng)平臺 地圖標注平臺怎么給錢注冊

觀察者模式結構圖

概念

一個"演員"(被觀察者),一群"觀眾"(觀察者),一臺"攝影機"(記錄容器)

【觀察者模式中主要角色】

1.抽象主題(Subject)角色:主題角色將所有對觀察者對象的引用保存在一個集合中,每個主題可以有任意多個觀察者。 抽象主題提供了增加和刪除觀察者對象的接口。

2.抽象觀察者(Observer)角色:為所有的具體觀察者定義一個接口,在觀察的主題發(fā)生改變時更新自己。

3.具體主題(ConcreteSubject)角色:存儲相關狀態(tài)到具體觀察者對象,當具體主題的內部狀態(tài)改變時,給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個具體子類實現。

4.具體觀察者(ConcretedObserver)角色:存儲一個具體主題對象,存儲相關狀態(tài),實現抽象觀察者角色所要求的更新接口,以使得其自身狀態(tài)和主題的狀態(tài)保持一致。

【使用場景】

假設項目經理讓我們寫了一個登陸接口,咔咔擦擦寫完了

第二天讓我們加入統(tǒng)計登陸次數,然后在后面加代碼第三天讓我們判斷登陸地區(qū),又在后面加代碼第四天讓我們在用戶登陸后推送活動,再再后面加代碼第N天,這個接口已經雜亂到沒人想維護了

我們需要讓項目保持高內聚低耦合,就可以用到觀察者模式(非必須,看需求)

【觀察者模式與其它模式】

1.【中介者模式】(Mediator):通過封裝復雜的更新語義,ChangeManager充當目標和觀察者之間的中介者。
2.【單例模式】(singleton模式):ChangeManager可使用Singleton模式來保證它是唯一的并且是可全局訪問的。

代碼示例

接口示例

// 主題接口
interface Subject{
    public function register(Observer $observer);
    public function notify();
}
// 觀察者接口
interface Observer{
    public function watch();
}

Subject就是被觀察者,Observer就是觀眾,也就是觀察者

被觀察者

// 被觀察者
class Action implements Subject{
     public $_observers=array();
     public function register(Observer $observer){
         $this->_observers[]=$observer;
     }
 
     public function notify(){
         foreach ($this->_observers as $observer) {
             $observer->watch();
         }
 
     }
 }

Action實現了被觀察者接口,他現在就是被觀察者,再定義一個$_observers數組,他就是記錄觀眾的容器了。

首先實現register方法,用它傳入一個觀察者,然后塞到數組里,再實現notify()方法,它會遍歷容器數組,執(zhí)行每個觀察者的watch()方法。

觀察者

// 觀察者
class Cat implements Observer{
     public function watch(){
         echo "Cat watches TVhr/>";
     }
 }
 class Dog implements Observer{
     public function watch(){
         echo "Dog watches TVhr/>";
     }
 }
 class People implements Observer{
     public function watch(){
         echo "People watches TVhr/>";
     }
 }

這里定義了三個觀察者,全都實現了Observer接口,前面的Subject會循環(huán)調用每個觀察者的watch()方法,所以我們需要實現每個觀察者的watch()方法。

調用

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

首先new被觀察者對象,執(zhí)行它的register()方法,把每個觀察者都放入容器數組,最后執(zhí)行notify()方法,通知所有觀察者執(zhí)行自己的方法。

PHP原生自帶的觀察者模式

PHP有自帶的觀察者模式

  • splsubject接口 - 被觀察者
  • Observer接口 - 觀察者
  • SplObjectStorage對象 - 容器

首先我們有一個用戶登錄類

class user{

  public function login()
  {
      echo '登錄完畢'
  }

讓他實現splsubject接口成為被觀察者。

  • 首先在構造函數里,讓他new SplObjectStorag()對象并賦值到屬性上方便后面調用
  • 實現attach()方法,用來注冊觀察者
  • 實現detach()方法,用來刪除觀察者
  • 實現notify()方法,用來遍歷容器,調用每個觀察者的update方法(必須是update)
  • rewind方法是容器指針重置到最開始,valid方法檢測容器是否遍歷完成并返回布爾,current方法是獲取當前的觀察者,next方法是將指針后移一位
  • 修改login()方法,在里面調用notify()來通知觀察者事件完成了
class user implements splsubject{

    protected $observer = null;

    public function __construct()
    {
        $this->observer = new SplObjectStorage();
    }

    public function login()
    {
        $this->notify();
        echo '登錄完畢';
    }

    public function attach(SplObserver $observer)
    {
        $this->observer->attach($observer);
    }

    public function detach(SplObserver $observer)
    {
        $this->observer->detach($observer);
    }

    public function notify()
    {
        $this->observer->rewind();
        while ($this->observer->valid())
        {
            $observer = $this->observer->current();
            $observer->update($this);
            $this->observer->next();
        }
    }
}

觀察者

每個觀察者實現SplObserver接口,并實現update()方法

class cat implements SplObserver {

    public function update(SplSubject $subject)
    {
        echo '小貓叫一下';
    }
}
class dog implements SplObserver {
    public function update(SplSubject $subject)
    {
        echo '小狗吼一聲';
    }
}

應用

// 實時觀察
$user = new user();
$user->attach(new cat());
$user->attach(new dog());
$user->login();

以上就是解析PHP觀察者模式(Observer)的詳細內容,更多關于PHP觀察者模式(Observer)的資料請關注腳本之家其它相關文章!

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

標簽:六安 鶴崗 遼陽 鷹潭 克拉瑪依 唐山 柳州 白城

巨人網絡通訊聲明:本文標題《解析PHP觀察者模式Observer》,本文關鍵詞  解析,PHP,觀察者,模式,Observer,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《解析PHP觀察者模式Observer》相關的同類信息!
  • 本頁收集關于解析PHP觀察者模式Observer的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成a人v欧美综合天堂| 日韩欧美专区在线| 国产精品网曝门| 欧美一区二区三区四区久久| 99久久久精品| 黑人巨大精品欧美一区| 亚洲国产日韩在线一区模特| 欧美日韩不卡一区| 国产精品三级在线观看| 一本大道综合伊人精品热热| 欧美xxxx老人做受| 国产精品嫩草久久久久| 国产成人免费av在线| 94-欧美-setu| 成人h动漫精品一区二区| 久久影院视频免费| 成人深夜在线观看| 国产色综合一区| 欧美一级生活片| 国产成人精品www牛牛影视| 欧美一级免费大片| 日韩激情在线观看| 韩国精品一区二区| 国产一区日韩二区欧美三区| 精品国产一区a| 国产成人精品免费一区二区| 一区二区三区毛片| 一区在线中文字幕| 中文字幕av一区 二区| 欧美二区三区的天堂| 欧美sm极限捆绑bd| 亚洲丝袜精品丝袜在线| 欧美老年两性高潮| 成人精品鲁一区一区二区| 久久精品理论片| 视频一区视频二区中文字幕| 国产精品短视频| 国产精品剧情在线亚洲| 欧美一区二区久久| 欧美成人在线直播| 激情五月婷婷综合| 日本中文一区二区三区| 高清shemale亚洲人妖| 亚洲视频一二区| 亚洲免费资源在线播放| 日本午夜一区二区| 日韩成人av影视| 亚洲欧美视频在线观看视频| 99re这里只有精品视频首页| 国产一区二区美女| 欧美在线|欧美| 欧美中文字幕久久| 欧美图片一区二区三区| 久久精品理论片| 99精品视频中文字幕| 国产在线国偷精品免费看| 国产精品嫩草久久久久| 欧美成人r级一区二区三区| 在线免费亚洲电影| 精品免费国产二区三区| 69堂国产成人免费视频| 国产精品123区| 天堂资源在线中文精品| 国产亚洲短视频| 亚洲精品国产精华液| 蜜臀av性久久久久av蜜臀妖精| 久久亚洲捆绑美女| 国产欧美日韩综合| 国产经典欧美精品| 欧美午夜精品久久久久久孕妇| 亚洲人成7777| 在线观看视频一区二区欧美日韩| 日韩精品中文字幕一区二区三区| 久久电影网电视剧免费观看| 欧美久久久久久久久| 日本大胆欧美人术艺术动态| 欧美天堂亚洲电影院在线播放| 久久精品夜色噜噜亚洲a∨| 蜜桃av一区二区| 五月开心婷婷久久| 欧美激情在线一区二区| 国产91精品精华液一区二区三区| 日产精品久久久久久久性色| 中文字幕在线观看一区| heyzo一本久久综合| 国产精品免费av| 色网站国产精品| 日韩黄色免费网站| 久久综合九色综合久久久精品综合 | 懂色av中文一区二区三区| 欧洲亚洲国产日韩| 欧洲国内综合视频| 首页亚洲欧美制服丝腿| 午夜精品久久久久影视| 欧美丝袜自拍制服另类| 五月综合激情婷婷六月色窝| 欧美激情中文不卡| 爽好多水快深点欧美视频| 欧美激情一区不卡| 国产一区二区三区四| 午夜天堂影视香蕉久久| 日韩无一区二区| 欧美日韩国产综合一区二区| 亚洲综合成人网| 97久久超碰国产精品| 日本va欧美va瓶| 精品国产不卡一区二区三区| 欧美另类z0zxhd电影| 九一九一国产精品| 精品1区2区在线观看| 在线视频一区二区三区| 91蜜桃婷婷狠狠久久综合9色| 亚洲午夜久久久久久久久久久| 国产一区三区三区| 欧美激情一区二区| 9191久久久久久久久久久| 天使萌一区二区三区免费观看| 国产传媒久久文化传媒| 欧美日韩国产a| 亚洲欧美激情视频在线观看一区二区三区| 一区二区三区四区亚洲| 亚洲三级电影网站| 精品视频1区2区3区| 欧美亚洲综合网| 麻豆国产一区二区| 成人av在线影院| 亚洲国产人成综合网站| 不卡av免费在线观看| 欧美电视剧在线观看完整版| 免费精品视频在线| 日韩免费一区二区| 宅男噜噜噜66一区二区66| 日本欧美大码aⅴ在线播放| 99re66热这里只有精品3直播| 亚洲图片一区二区| 久久―日本道色综合久久| 国产成人精品三级麻豆| 久久99精品国产.久久久久久| 国产精品妹子av| 欧美日韩色一区| jvid福利写真一区二区三区| 欧美视频一二三区| 亚洲欧美另类久久久精品| 91精品国产综合久久久蜜臀粉嫩 | 91精品黄色片免费大全| 欧美一区二区福利在线| 国内精品写真在线观看| 欧美经典一区二区| 成人动漫在线一区| 欧美日本一道本在线视频| 欧美一级欧美一级在线播放| 午夜精品福利一区二区三区蜜桃| 国产精品一二三四| 91精品国产入口在线| 石原莉奈在线亚洲二区| 欧美日韩精品欧美日韩精品| 久久一留热品黄| 51精品久久久久久久蜜臀| 精品精品欲导航| 日韩成人午夜精品| 成人a免费在线看| 欧美丰满嫩嫩电影| 夜夜嗨av一区二区三区四季av| 成人av集中营| 777欧美精品| 久久久久九九视频| 看电视剧不卡顿的网站| 久久精品日产第一区二区三区高清版| 亚洲v精品v日韩v欧美v专区| 久久一区二区三区四区| 国产精品少妇自拍| 国产精品视频你懂的| 国产欧美日韩在线| 国产精品女人毛片| 色婷婷av一区二区三区软件| 偷偷要91色婷婷| 26uuu成人网一区二区三区| 国产不卡在线一区| 一区二区三区四区在线免费观看| 亚洲视频在线一区| 一本到三区不卡视频| 国产婷婷一区二区| 日韩欧美二区三区| 日本一区二区视频在线| 亚洲香肠在线观看| 亚洲日本在线天堂| 亚洲一区二区偷拍精品| 亚洲成人免费看| 日韩精品一二三区| 国产激情91久久精品导航| 久草精品在线观看| 欧美日韩综合在线| 久久久亚洲国产美女国产盗摄| 国产欧美精品国产国产专区| 国产日本欧美一区二区| 日韩理论电影院| 国产中文字幕精品| 2020国产精品自拍| 国产色综合久久| 美女久久久精品|