PHP 設計模式之觀察者模式

來源:互聯網
上載者:User
介紹     現在有兩派,有的人建議使用設計模式,有的人不建議使用設計模式!
這就向寫文章一樣,有的人喜歡文章按照套路走,比如敘事性質的文章,時間,地點,人物,事件。而有的人喜歡寫雜文或者散文,有的人喜歡寫詩詞!

現在寫代碼很多地方類似於寫文章,但是在有些地方比寫文章需要更多的技能!寫文章寫多了一般也能寫出優秀的文章,而代碼也一樣,寫多了也能寫出很多有些的代碼!

很多時候,我看設計模式的時候,有些設計模式只是吻合My Code習慣。但是你硬去套它,那麼反而適得其反。——很多時候是學會了招式,在應用中不知不覺的使用上這些招式,才能掌握其道,但是也不要拘泥於招式,正所謂“無招勝有招”嗎?

 我學設計模式的初衷,就是知道有這麼個玩意兒?腦子裡有這麼個印象,也不會生套它!如果設計模式不符合你的習慣對你閱讀代碼反而是不利的! 觀察者模式定義對象的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新! 設計原則 在觀察者模式中,會改變的是主題的狀態以及觀察者的數目。用這個模式,你可以改變依賴於主題狀態的對象,卻不必改變主題。——找出程式中會變化的方面,然後將其和固定不變的方面相分離!  主題和觀察者都使用介面:觀察者利用主題的介面向主題註冊,而主題利用觀察者介面通知觀察者。這樣可以讓兩者之間運作正常,又同時具有松耦合的優點! ——針對介面編程,不針對實現編程!。 觀察者模式利用“組合”將許多觀察者組合進主題中。對象(觀察者——主題)之間的這種關係不是通過繼承產生的,而是在運行時利用組合的方式產生的。 ——多用組合,少用繼承! 代碼 
<?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();

 

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.