PHP觀察者模式

一.觀察者模式特點

解釋:觀察者模式(Observer),當一個對象的狀態發生改變時,依賴他的對象會全部收到通知,並自動更新。

場景: 一個事件發生後,要執行一連串更新操作.傳統的編程方式,就是在事件的代碼之後直接加入處理邏輯,當更新得邏輯增多之後,代碼會變得難以維護.這種方式是耦合的,侵入式的,增加新的邏輯需要改變事件主題的代碼,而觀察者模式實現了低耦合,非侵入式的通知與更新機制

 

二.代碼要點

1. 代碼分爲兩部分,事件部分,和觀察者部分

2. 事件部分要用到註冊樹模式中的註冊功能,把觀察者對象註冊到事件類的成員變量中去。

//事件基礎類
 abstract Class EventBase
{
       private $objectList;

       //把對象註冊到成員變量中
       public function add($object)
       {
           $this->objectList[] = $object;
       }

       //事件通知
       public function notify($even_info)
       {
           //遍歷並調用觀察者類中的update方法
            foreach ($this->objectList as $k=>$object){
                $object->update($even_info);
            }
       }
}

//觀察者接口
interface ServerInterFace
{
    public function update($even_info=null);
}

//觀察者類
Class Server implements ServerInterFace
{
    public function update($even_info=null)
    {
        echo $even_info;
        echo '收到,立馬執行!';
    }
}

//觀察者類
Class Server2 implements ServerInterFace
{
    public function update($even_info=null)
    {
        echo $even_info;
        echo '收到,立馬執行!';
    }
}

//具體事件
Class LoginEvent extends EventBase
{
}

//登錄事件
$loginEvent = new LoginEvent();

 //爲登錄事件添加觀察者
$loginEvent->add(new Server);
$loginEvent->add(new Server2);
$loginEvent->notify('登錄成功,請設置好相關信息');

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章