亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

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

解析PHP觀察者模式Observer

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

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

概念

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

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

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

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

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

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

【使用場景】

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

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

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

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

1.【中介者模式】(Mediator):通過封裝復(fù)雜的更新語義,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實現(xiàn)了被觀察者接口,他現(xiàn)在就是被觀察者,再定義一個$_observers數(shù)組,他就是記錄觀眾的容器了。

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

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

調(diào)用

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

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

PHP原生自帶的觀察者模式

PHP有自帶的觀察者模式

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

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

class user{

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

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

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

觀察者

每個觀察者實現(xiàn)SplObserver接口,并實現(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)用

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

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《解析PHP觀察者模式Observer》,本文關(guān)鍵詞  解析,PHP,觀察者,模式,Observer,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解析PHP觀察者模式Observer》相關(guān)的同類信息!
  • 本頁收集關(guān)于解析PHP觀察者模式Observer的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲天堂在线播放| 99色视频在线观看| 国产不卡福利| 可以免费在线看黄的网站| 国产91精品一区二区| 国产麻豆精品免费视频| 欧美一区二区三区在线观看| 久久国产影院| 成人免费高清视频| 亚洲第一页色| 999精品在线| 国产精品自拍亚洲| 九九精品久久| 中文字幕一区二区三区 精品| 尤物视频网站在线| 夜夜操天天爽| 国产成人啪精品| 黄视频网站在线观看| 黄视频网站在线看| 日韩在线观看免费完整版视频| 欧美另类videosbestsex久久| 99久久视频| 国产不卡精品一区二区三区| 久久99中文字幕| 欧美国产日韩在线| 免费国产在线观看不卡| 九九九国产| 国产福利免费观看| 久久久久久久免费视频| 国产韩国精品一区二区三区| 九九热国产视频| 精品国产一级毛片| 天天色色色| 日本免费看视频| 韩国毛片| a级毛片免费全部播放| 999久久久免费精品国产牛牛| 尤物视频网站在线| 你懂的国产精品| 国产亚洲免费观看| 麻豆污视频| | 午夜在线亚洲| 国产精品免费精品自在线观看| 国产激情一区二区三区| 国产一区二区精品久| 国产精品自拍一区| 日本伦理网站| 91麻豆国产| 亚洲女人国产香蕉久久精品| 久久99中文字幕久久| 欧美另类videosbestsex高清| 亚久久伊人精品青青草原2020| 国产原创中文字幕| 日本伦理片网站| 日本特黄特黄aaaaa大片| 日韩免费在线视频| 国产一区二区福利久久| 欧美日本国产| 美女免费精品视频在线观看| 国产麻豆精品视频| 日本免费乱理伦片在线观看2018| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 青青青草影院| 色综合久久天天综合| 精品国产一区二区三区久久久狼| 国产亚洲精品aaa大片| 青青久久精品| 一本高清在线| 精品国产一级毛片| 日韩一级黄色片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 九九久久国产精品大片| 久草免费在线观看| 999精品视频在线| 国产伦久视频免费观看 视频| 韩国三级香港三级日本三级| 色综合久久天天综合观看| 久久成人性色生活片| 久久久久久久男人的天堂| 精品国产一区二区三区免费 | 精品久久久久久中文| 黄色福利片| 成人a大片在线观看| 久久国产一区二区| 欧美激情一区二区三区中文字幕| 国产激情一区二区三区| 国产成+人+综合+亚洲不卡| 亚洲 欧美 成人日韩| 黄视频网站免费看| 可以免费在线看黄的网站| 久久精品免视看国产成人2021| 欧美激情一区二区三区在线| 999精品在线| 成人免费观看视频| 91麻豆tv| 可以免费看毛片的网站| 国产高清在线精品一区二区| 精品视频一区二区三区免费| 亚洲wwwwww| 你懂的日韩| 久久国产精品永久免费网站| 91麻豆精品国产自产在线观看一区| 国产成人欧美一区二区三区的| 欧美日本免费| 欧美日本国产| 国产成人精品综合在线| 美女免费毛片| 日韩女人做爰大片| 97视频免费在线观看| 午夜家庭影院| 久草免费在线观看| 99久久精品国产高清一区二区| 成人高清免费| 日韩欧美一及在线播放| 黄色福利| 精品视频一区二区三区免费| 91麻豆高清国产在线播放| 天天色成人网| 亚洲天堂免费观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日本在线不卡视频| 成人在免费观看视频国产| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 午夜家庭影院| 久久精品店| 色综合久久天天综合绕观看| 成人免费观看视频| 韩国三级视频网站| 你懂的国产精品| 午夜在线影院| 99久久网站| 午夜在线亚洲| 一级女人毛片人一女人| 日本在线播放一区| 国产伦精品一区二区三区在线观看| 精品国产三级a∨在线观看| 青青青草视频在线观看| 精品国产三级a∨在线观看| 欧美另类videosbestsex视频| 成人高清免费| 亚洲精品久久久中文字| 亚洲 激情| 国产不卡福利| 深夜做爰性大片中文| 久久精品人人做人人爽97| 久久国产一区二区| 亚洲爆爽| 免费毛片基地| 国产91素人搭讪系列天堂| 你懂的国产精品| 精品国产香蕉在线播出| 亚欧乱色一区二区三区| 成人影院一区二区三区| 国产一区二区精品尤物| 欧美激情伊人| 高清一级淫片a级中文字幕| 国产视频网站在线观看| a级黄色毛片免费播放视频| 美女免费黄网站| 国产极品白嫩美女在线观看看| 国产综合成人观看在线| 99色视频在线观看| 99色视频在线观看| 精品久久久久久中文字幕2017| 亚洲精品影院| 免费国产在线视频| 久久久成人网| 日本伦理片网站| 香蕉视频久久| 四虎久久精品国产| 精品视频免费在线| 日韩一级黄色片| 精品视频在线观看一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 91麻豆精品国产自产在线| 一级女性全黄生活片免费| 夜夜操天天爽| 精品视频免费观看| 国产91精品一区| 亚洲精品影院一区二区| 日韩中文字幕在线播放| 999久久久免费精品国产牛牛| 精品视频在线看 | 午夜在线亚洲男人午在线| 九九九网站| 国产成人啪精品| 亚洲 激情| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 一本高清在线| 久久精品免视看国产成人2021| 日韩av片免费播放| 午夜欧美成人久久久久久| 成人免费网站久久久| 国产欧美精品午夜在线播放| 黄视频网站在线免费观看| 沈樵在线观看福利| 九九免费精品视频| 国产91丝袜在线播放0| 精品国产一区二区三区久久久蜜臀 |