PHP設計模式-觀察者

來源:互聯網
上載者:User

標籤:觀察者

PHP設計模式-觀察者

   一個對象狀態發生改變後,會影響到其他幾個對象的改變,這時候可以用觀察者模式。一個對象通過添加一個attach方法允許觀察者註冊自己,使本身變得可觀察。當被觀察的對象更改時,它會將訊息發送到登入的觀察者。觀察者使用該資訊執行的操作與被觀察的對象無關。觀察者模式是一種事件系統,意味著這一模式允許某些類通過觀察被觀察類的狀態變化,做出相應的動作。

   觀察者模式UML圖

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/84/18/wKiom1eFqYTib7dYAABp7cyUPIY415.jpg" title="1344171151_1446.jpg" alt="wKiom1eFqYTib7dYAABp7cyUPIY415.jpg" />

  php5中提供了觀察者observer與被觀察者subject介面

   interface SplSubject  

    {  

    function attach(SplObserver $observer);  

    function detach(SplObserver $observer);  

    function notify();  

    }  

   interface SqlObserver  

    {  

    function update(SplSubject $subject);  

    }

  例子如下

<?php  class user implements SplSubject{  public     $lognum;  public     $hobby;  protected  $observers;    public function __construct($hobby){      $this->lognum= rand(1,10);      $this->hobby= $hobby;      $this->observers=new SplObjectStorage();  }  public function login(){    $this->notify();  }    public function attach(SPLObserver $observer){    $this->observers->attach($observer);  }    public function detach(SPLObserver $observer){      $this->observers->detach($observer);  }    public function notify(){      $this->observers->rewind();      while($this->observers->valid){         $observer= $this->observers->current();         $observer->update($this);         $this->observers->next();      }        }      }     class secrity implements SPLObserver{            public function update(SplSubject $subject){          if($subject->lognum>=3){                        }else{                        }                }  }      class ad implements SPLObserver{        public function update(SplSubject $subject){          if($subject->hobby=="sports"){            }else{            }        }  }    //實施觀察  $user= new user("sports");  $user->attach(new secrity());  $user->attach(new ad());  $user->login();    ?>


本文出自 “殘夢” 部落格,謝絕轉載!

PHP設計模式-觀察者

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.