成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP設計模式

crossea / 2928人閱讀

摘要:觀察者模式就像訂閱報紙,知識名稱不太一樣出版社改為主題,訂閱者稱為觀察者。觀察者模式在對象之間定義一對多的依賴,這樣一來,當一個對象改變狀態(tài),依賴他的對象就會收到通知,并自動更新。觀察者模式定義了對象之間的一對多關系。

[TOC]

依賴注入 策略模式 單例模式 觀察者模式 觀察者模式

我們來看看報紙和雜志的訂閱是怎么回事:

報社的業(yè)務就是出版報紙。

向某家報社訂閱報紙,只要他們有新報紙出版,就會給你送來。

當你不想再看報紙的時候,取消訂閱,他們就不會再送新報紙來。

只要報社還再運營,就會一直有人向他們訂閱報紙或者取消訂閱報紙。

觀察者模式就像訂閱報紙,知識名稱不太一樣:出版社改為“主題”(Subject),訂閱者稱為“觀察者”(Observer)。實現(xiàn)觀察者模式的方式不只一種,但是包含Subject和Observer接口的類設計的做法最常見。

主題可以注冊、注銷觀察者,當數(shù)據(jù)改變時,可以通知觀察者;所有的觀察者必須繼承觀察者接口,這個接口只有一個update()方法,當主題的狀態(tài)被改變時調(diào)用。主題繼承 SplSubject,這個是PHP內(nèi)置觀察者模式主題接口;觀察者繼承SplObserver;同時,主題中用SplObjectStorage來存儲觀察者列表。

這個是主題:

observers = new SplObjectStorage();
    }

    /**
     *  注冊觀察者
     *
     * Attach an SplObserver
     * @link https://php.net/manual/en/splsubject.attach.php
     * @param SplObserver $observer 

* The SplObserver to attach. *

* @return void * @since 5.1.0 */ public function attach(SplObserver $observer) { $this->observers->attach($observer); } /** * 注銷觀察者 * * Detach an observer * @link https://php.net/manual/en/splsubject.detach.php * @param SplObserver $observer

* The SplObserver to detach. *

* @return void * @since 5.1.0 */ public function detach(SplObserver $observer) { $this->observers->detach($observer); } /** * 通知觀察者 * Notify an observer * @link https://php.net/manual/en/splsubject.notify.php * @return void * @since 5.1.0 */ public function notify() { // 循環(huán)調(diào)用觀察者自身的update方法 if ($this->observers->count() > 0) { /** @var SplObserver $observer */ foreach ($this->observers as $observer) { $observer->update($this); } } } /** * 數(shù)據(jù)改變,同時通知觀察者 * * @param $upd_data */ public function updData($upd_data) { $this->upd_data = $upd_data; // 當數(shù)據(jù)改變時,再需要通知觀察者的地方調(diào)用 notify $this->notify(); } /** * 消息改變,同時通知觀察者 * * @param $upd_msg */ public function updMsg($upd_msg) { $this->upd_msg = $upd_msg; // 這個 notify 也可以不寫在方法中,靈活運用 $this->notify(); } /** * @return mixed */ public function getUpdData() { return $this->upd_data; } /** * @return mixed */ public function getUpdMsg() { return $this->upd_msg; } }

有一個貓貓觀察者:


     * The SplSubject notifying the observer of an update.
     * 

* @return void * @since 5.1.0 */ public function update(SplSubject $subject) { // 這個 $subject 一開始比較難理解,最后發(fā)現(xiàn)確實很聰明 // 我覺得這種實現(xiàn)方式最好,具體要得到哪些更新,由注冊觀察者的主題決定 // 觀察者不知道主題的細節(jié),只知道實現(xiàn)了觀察者接口 /** * @var Subject $subject */ $listen_data = $subject->getUpdData(); $listen_msg = $subject->getUpdMsg(); echo "I am 貓貓觀察者,I get new data:" . $listen_data . ";msg:" . $listen_msg; echo "
"; } }

還有一個狗狗觀察者:

getUpdData();
        $listem_msg = $subject->getUpdMsg();

        echo "I am 狗狗觀察者,data:" . $listen_data . ";msg:" . $listem_msg;
        echo "
"; } }

來看一下調(diào)用吧:

attach($catObserver);
$subject->attach($dogObserver);

// 主題有所變化,觀察者得到對應的變化
$subject->updData(12);
$subject->updMsg("你媽媽喊你回家吃飯");

顯示結果:

I am 貓貓觀察者,I get new data:12;msg:還不該吃飯
I am 狗狗觀察者,data:12;msg:還不該吃飯
I am 貓貓觀察者,I get new data:12;msg:你媽媽喊你回家吃飯
I am 狗狗觀察者,data:12;msg:你媽媽喊你回家吃飯

把我的例子弄懂,你也應該能理解觀察者模式了。

來看一下你學到了什么:
00原則--對象之間松耦合設計。

觀察者模式--在對象之間定義一對多的依賴,這樣一來,當一個對象改變狀態(tài),依賴他的對象就會收到通知,并自動更新。

觀察者模式定義了對象之間的一對多關系。

觀察者不知道觀察者的細節(jié),也不知道主題的細節(jié),只知道實現(xiàn)了觀察者接口。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/29748.html

相關文章

  • PHP基礎

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細源碼注解 PHP 字符串操作整理 一些有關字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評論0 收藏0
  • PHP 運行模式

    摘要:接下來會對其中五個比較常見的運行模式進行說明。模式是目前主流的服務運行模式,擁有高效可靠的性能,推薦大家使用。由于微軟的排他性,只能運行于環(huán)境。 SAPI 這里所說的 PHP 運行模式, 其實指的是 SAPI (Server Application Programming Interface,服務端應用編程端口 )。SAPI 為 PHP 提供了一個和外部通信的接口, PHP 就是通過這...

    OnlyMyRailgun 評論0 收藏0
  • php資料集

    摘要:簡單字符串緩存實戰(zhàn)完整實戰(zhàn)種設計模式設計模式是面向對象的最佳實踐成為專業(yè)程序員路上用到的各種優(yōu)秀資料神器及框架成為一名專業(yè)程序員的道路上,需要堅持練習學習與積累,技術方面既要有一定的廣度,更要有自己的深度。 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 微型新聞系統(tǒng)的開發(fā)(PHP 5.4 + MySQL 5.5) 九個很有用的 PHP 代碼 php 代碼 國內(nèi)值得關注的...

    RobinQu 評論0 收藏0
  • PHP相關

    摘要:的機器學習庫的機器學習庫,包括算法交叉驗證神經(jīng)網(wǎng)絡等內(nèi)容。在即將到來的大會上,她將和大家分享在機器學習領域的全新可能。入門總結入門相關,如安裝配置基本使用等。 基于 Swoole 開發(fā) PHP 擴展 Swoole-1.9.7 增加了一個新特性,可以基于 Swoole 使用 C++ 語言開發(fā)擴展模塊,在擴展模塊中可以注冊 PHP 內(nèi)置函數(shù)和類。現(xiàn)在可以基于 Swoole 來編寫 PHP ...

    lewinlee 評論0 收藏0
  • PHP 運行模式與運行原理

    摘要:當客戶端請求到達時,進程管理器選擇并連接到一個解釋器。子進程完成處理后將標準輸出和錯誤信息從同一連接返回。子進程接著等待并處理來自進程管理器運行在中的下一個連接。 目前常見的4種PHP運行模式 CGI通用網(wǎng)關接口模式 FAST-CGI模式 CLI命令行模式 模塊模式 運行模式 CGI通用網(wǎng)關接口模式 每有一個用戶請求,都會先要創(chuàng)建cgi的子進程,然后處理請求,處理完后結束這個子進程...

    Pocher 評論0 收藏0
  • workerman / 小談PHP中的幾種運行模式

    摘要:話說當下一共有種運行模式,分別是和模塊模式。使用,全稱進程管理器進行管理。工作原理啟動時載入進程管理器進程管理器自身初始化,啟動多個解釋器進程并等待來自的連接當客戶端請求到達時,進程管理器選擇并連接到一個解釋器。 我們知道 workerman 程序需要在php-cli模式下運行,也就是命令行模式,這塊我們有必要了解一下。 話說PHP當下一共有4種運行模式,分別是CGI、FastCGI、...

    darkbaby123 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<