校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > 解析PHP觀察者模式Observer

解析PHP觀察者模式Observer

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

觀察者模式結(jié)構(gòu)圖

概念

一個(gè)"演員"(被觀察者),一群"觀眾"(觀察者),一臺(tái)"攝影機(jī)"(記錄容器)

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

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

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

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

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

【使用場(chǎng)景】

假設(shè)項(xiàng)目經(jīng)理讓我們寫了一個(gè)登陸接口,咔咔擦擦寫完了

第二天讓我們加入統(tǒng)計(jì)登陸次數(shù),然后在后面加代碼第三天讓我們判斷登陸地區(qū),又在后面加代碼第四天讓我們?cè)谟脩舻顷懞笸扑突顒?dòng),再再后面加代碼第N天,這個(gè)接口已經(jīng)雜亂到?jīng)]人想維護(hù)了

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

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

1.【中介者模式】(Mediator):通過(guò)封裝復(fù)雜的更新語(yǔ)義,ChangeManager充當(dāng)目標(biāo)和觀察者之間的中介者。
2.【單例模式】(singleton模式):ChangeManager可使用Singleton模式來(lái)保證它是唯一的并且是可全局訪問(wèn)的。

代碼示例

接口示例

// 主題接口
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實(shí)現(xiàn)了被觀察者接口,他現(xiàn)在就是被觀察者,再定義一個(gè)$_observers數(shù)組,他就是記錄觀眾的容器了。

首先實(shí)現(xiàn)register方法,用它傳入一個(gè)觀察者,然后塞到數(shù)組里,再實(shí)現(xiàn)notify()方法,它會(huì)遍歷容器數(shù)組,執(zhí)行每個(gè)觀察者的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/>";
     }
 }

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

調(diào)用

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

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

PHP原生自帶的觀察者模式

PHP有自帶的觀察者模式

  • splsubject接口 - 被觀察者
  • Observer接口 - 觀察者
  • SplObjectStorage對(duì)象 - 容器

首先我們有一個(gè)用戶登錄類

class user{

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

讓他實(shí)現(xiàn)splsubject接口成為被觀察者。

  • 首先在構(gòu)造函數(shù)里,讓他new SplObjectStorag()對(duì)象并賦值到屬性上方便后面調(diào)用
  • 實(shí)現(xiàn)attach()方法,用來(lái)注冊(cè)觀察者
  • 實(shí)現(xiàn)detach()方法,用來(lái)刪除觀察者
  • 實(shí)現(xiàn)notify()方法,用來(lái)遍歷容器,調(diào)用每個(gè)觀察者的update方法(必須是update)
  • rewind方法是容器指針重置到最開(kāi)始,valid方法檢測(cè)容器是否遍歷完成并返回布爾,current方法是獲取當(dāng)前的觀察者,next方法是將指針后移一位
  • 修改login()方法,在里面調(diào)用notify()來(lái)通知觀察者事件完成了
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();
        }
    }
}

觀察者

每個(gè)觀察者實(shí)現(xiàn)SplObserver接口,并實(shí)現(xiàn)update()方法

class cat implements SplObserver {

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

應(yīng)用

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

以上就是解析PHP觀察者模式(Observer)的詳細(xì)內(nèi)容,更多關(guān)于PHP觀察者模式(Observer)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • PHP設(shè)計(jì)模式之觀察者模式入門與應(yīng)用案例詳解
  • PHP 觀察者模式深入理解與應(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í)例分析

標(biāo)簽:六安 鶴崗 遼陽(yáng) 鷹潭 克拉瑪依 唐山 柳州 白城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解析PHP觀察者模式Observer》,本文關(guān)鍵詞  解析,PHP,觀察者,模式,Observer,;如發(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觀察者模式Observer》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于解析PHP觀察者模式Observer的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    欧美三级午夜理伦三级中视频| 久久久久九九视频| 欧美大白屁股肥臀xxxxxx| 国产网站一区二区| 日本不卡视频一二三区| 成人午夜免费av| 这里只有精品电影| 中文字幕永久在线不卡| 久久av资源网| 欧美婷婷六月丁香综合色| 欧美国产日韩一二三区| 精品一区在线看| 欧美高清www午色夜在线视频| 自拍偷拍亚洲欧美日韩| 国产精品综合网| 精品久久久久久久一区二区蜜臀| 亚洲成人三级小说| 91免费版pro下载短视频| 国产亚洲综合av| 精品一区二区三区不卡| 欧美精品电影在线播放| 一个色综合网站| 91女厕偷拍女厕偷拍高清| 国产蜜臀97一区二区三区| 精品在线播放免费| 亚洲精品一区在线观看| 久久国产精品露脸对白| 欧美一区二区三区免费在线看| 一区二区久久久久| 欧美性受xxxx黑人xyx| 亚洲专区一二三| 在线国产亚洲欧美| 一二三区精品视频| 在线观看免费一区| 亚洲一级片在线观看| 欧美在线999| 亚洲成人动漫精品| 欧美日韩成人在线一区| 午夜视频久久久久久| 在线亚洲一区二区| 亚洲成人综合视频| 日韩视频一区二区在线观看| 免费在线观看日韩欧美| 日韩欧美视频一区| 国产精品一区三区| 中文字幕视频一区二区三区久| 成人黄色大片在线观看| 亚洲欧美日韩国产中文在线| 日本久久精品电影| 日韩av午夜在线观看| 欧美tickling挠脚心丨vk| 在线观看网站黄不卡| 精品毛片乱码1区2区3区 | 91精品国产综合久久小美女| 亚洲永久精品国产| 在线播放91灌醉迷j高跟美女| 国内欧美视频一区二区| 中文字幕免费不卡在线| 色哟哟国产精品免费观看| 午夜久久福利影院| 欧美精品一区二区三区蜜桃 | 波多野结衣中文字幕一区| 亚洲欧美偷拍另类a∨色屁股| 欧美影视一区在线| 国内成人自拍视频| 亚洲视频1区2区| 日韩小视频在线观看专区| 国产麻豆91精品| 一区二区三区中文字幕精品精品| 日韩欧美在线综合网| 国产mv日韩mv欧美| 丝袜亚洲精品中文字幕一区| 精品成人佐山爱一区二区| 色综合中文字幕国产| 亚洲国产aⅴ天堂久久| 国产午夜三级一区二区三| 一本色道**综合亚洲精品蜜桃冫| 日韩电影在线观看网站| 亚洲视频每日更新| 久久综合久久综合久久| 欧美日韩一区高清| 国产成人一区二区精品非洲| 亚洲成人av一区二区三区| 中文字幕高清一区| 欧美成人福利视频| 色欲综合视频天天天| 久久99精品国产麻豆婷婷| 最近中文字幕一区二区三区| 精品福利一区二区三区免费视频| 欧美三级电影网| thepron国产精品| 韩国理伦片一区二区三区在线播放| 亚洲精品少妇30p| 中文字幕不卡三区| 久久精品亚洲麻豆av一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 一本大道久久a久久综合婷婷| 激情五月婷婷综合| 日韩电影免费在线| 亚洲国产一区二区在线播放| 国产精品人成在线观看免费| 久久精品亚洲麻豆av一区二区 | 久久久久久97三级| 日韩三级av在线播放| 欧美性极品少妇| 色综合色狠狠天天综合色| 成人亚洲一区二区一| 国产精品亚洲第一区在线暖暖韩国| 日韩高清不卡一区| 日韩电影在线观看网站| 亚洲成av人**亚洲成av**| 一区二区三区日韩欧美| 亚洲人成网站精品片在线观看| 国产精品嫩草99a| 国产精品久久一卡二卡| 久久久综合精品| 日本一区二区三区视频视频| 国产亚洲1区2区3区| 久久婷婷综合激情| 久久久精品tv| 亚洲国产精品ⅴa在线观看| 国产精品久久久久影院亚瑟| 中文字幕一区二区三区不卡| 亚洲人成小说网站色在线| 亚洲精选视频免费看| 一区二区三区日韩欧美精品| 亚洲国产一区视频| 首页综合国产亚洲丝袜| 美女视频网站久久| 久久国产精品无码网站| 看电影不卡的网站| 国产精品18久久久久久久久久久久 | 99精品视频在线播放观看| 一本大道av一区二区在线播放| 在线视频中文字幕一区二区| 91精品国产综合久久精品麻豆| 精品久久久三级丝袜| 国产网站一区二区| 亚洲欧美日本韩国| 七七婷婷婷婷精品国产| 国产黄人亚洲片| 欧美亚洲高清一区| 日韩精品在线网站| 国产精品久久影院| 亚洲va中文字幕| 国产在线观看免费一区| 成人精品一区二区三区中文字幕| 在线日韩一区二区| 精品国产乱码久久| 亚洲美腿欧美偷拍| 喷水一区二区三区| 97超碰欧美中文字幕| 日韩一区二区免费视频| 国产精品精品国产色婷婷| 五月激情综合网| 成人小视频在线| 日韩美女一区二区三区四区| 中文字幕在线观看不卡视频| 日韩精品一卡二卡三卡四卡无卡 | 美国一区二区三区在线播放| 国产一区二区电影| 欧美最新大片在线看| 日韩欧美成人激情| 亚洲综合视频在线| 国产99一区视频免费| 欧美精品在线观看播放| 国产欧美精品一区| 日本一不卡视频| 91亚洲精品乱码久久久久久蜜桃| 欧美va亚洲va香蕉在线| 亚洲一卡二卡三卡四卡五卡| av毛片久久久久**hd| 欧美电视剧免费全集观看| 亚洲激情欧美激情| 国产98色在线|日韩| 日韩写真欧美这视频| 亚洲国产精品一区二区www在线 | 麻豆精品一区二区三区| 色香蕉久久蜜桃| 国产精品护士白丝一区av| 九色|91porny| 日韩一区二区三区视频| 日韩中文字幕1| 欧美精品一卡二卡| 亚洲国产婷婷综合在线精品| 91久久国产最好的精华液| 国产精品成人一区二区艾草| 国产99久久久久| 国产人成亚洲第一网站在线播放| 日本中文字幕一区二区视频| 欧美日韩成人综合| 三级在线观看一区二区 | 91高清视频在线| 中文字幕一区二区三区在线播放 | 美腿丝袜一区二区三区| 欧美精品99久久久**| 天天综合色天天综合色h| 欧美巨大另类极品videosbest | 国内精品在线播放| 日韩免费性生活视频播放|