中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中的觀察者模式是什么

發布時間:2021-07-07 17:05:58 來源:億速云 閱讀:111 作者:chen 欄目:開發技術

這篇文章主要講解了“PHP中的觀察者模式是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP中的觀察者模式是什么”吧!

介紹

現在有兩派,有的人建議使用設計模式,有的人不建議使用設計模式! 這就向寫文章一樣,有的人喜歡文章按照套路走,比如敘事性質的文章,時間,地點,人物,事件。而有的人喜歡寫雜文或者散文,有的人喜歡寫詩詞! 現在寫代碼很多地方類似于寫文章,但是在有些地方比寫文章需要更多的技能!寫文章寫多了一般也能寫出優秀的文章,而代碼也一樣,寫多了也能寫出很多有些的代碼! 很多時候,我看設計模式的時候,有些設計模式只是吻合我的代碼習慣。但是你硬去套它,那么反而適得其反。——很多時候是學會了招式,在應用中不知不覺的使用上這些招式,才能掌握其道,但是也不要拘泥于招式,正所謂“無招勝有招”嗎? 我學設計模式的初衷,就是知道有這么個玩意兒?腦子里有這么個印象,也不會生套它!如果設計模式不符合你的習慣對你閱讀代碼反而是不利的! 觀察者模式定義對象的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知并自動更新!

設計原則

在觀察者模式中,會改變的是主題的狀態以及觀察者的數目。用這個模式,你可以改變依賴于主題狀態的對象,卻不必改變主題。——找出程序中會變化的方面,然后將其和固定不變的方面相分離!  主題和觀察者都使用接口:觀察者利用主題的接口向主題注冊,而主題利用觀察者接口通知觀察者。這樣可以讓兩者之間運作正常,又同時具有松耦合的優點! ——針對接口編程,不針對實現編程!  觀察者模式利用“組合”將許多觀察者組合進主題中。對象(觀察者——主題)之間的這種關系不是通過繼承產生的,而是在運行時利用組合的方式產生的。 ——多用組合,少用繼承!

代碼

<?php
/**
 * 觀察者模式
 * @author: Mac
 * @date: 2012/02/22
 */ 
class Paper{ /* 主題    */
    private $_observers = array();
 
    public function register($sub){ /*  注冊觀察者 */
        $this->_observers[] = $sub;
    }
    public function trigger(){  /*  外部統一訪問    */
        if(!empty($this->_observers)){
            foreach($this->_observers as $observer){
                $observer->update();
            }
        }
    }
} 
/**
 * 觀察者要實現的接口
 */
interface Observerable{
    public function update();
} 
class Subscriber implements Observerable{
    public function update(){
        echo "Callback\n";
    }
}

下面是測試代碼

/*  測試    */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();

總結

當新對象要填入的時候,只需要在主題(又叫可觀察者)中進行注冊(注冊方式很多,你也可以在構造的時候,或者框架訪問的接口中進行注冊),然后實現代碼直接在新對象的接口中進行。這降低了主題對象和觀察者對象的耦合度。 好的設計模式不會直接進入你的代碼中,而是進入你的大腦中。

感謝各位的閱讀,以上就是“PHP中的觀察者模式是什么”的內容了,經過本文的學習后,相信大家對PHP中的觀察者模式是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

额尔古纳市| 莱西市| 深圳市| 赤水市| 和田县| 奉节县| 五大连池市| 延寿县| 临湘市| 容城县| 醴陵市| 霸州市| 佛山市| 肇庆市| 马尔康县| 松江区| 将乐县| 措美县| 弥勒县| 罗城| 正蓝旗| 虎林市| 长泰县| 大田县| 富阳市| 佛学| 石嘴山市| 中卫市| 陇川县| 来凤县| 铜山县| 天祝| 蓝山县| 赤壁市| 常熟市| 临城县| 阿图什市| 岳普湖县| 高唐县| 泽普县| 来安县|