程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php設計模式 觀察者模式,設計模式觀察者

php設計模式 觀察者模式,設計模式觀察者

編輯:關於PHP編程

php設計模式 觀察者模式,設計模式觀察者


觀察者模式的核心是把客戶元素(觀察者)從一個中心類(主體)中分離開來。當主體知道事件發生時,觀察者需要被通知到。同時,我們並不希望將主體與觀察者之間的關系進行硬編碼。為了達到這個目的,我們可以允許觀察者在主體上進行注冊。

觀察者模式實現了低耦合、非侵入式的通知與更新機制。

場景:當一個事件發生後,要執行一連串更新操作。

EventGenerator.php
<?php
namespace Baobab;
/**
 * Class EventGenerator 基類,事件發生者
 */
abstract class EventGenerator{

    //觀察者對於事件發生者是不可見的,事件發生者不關心有哪些觀察者關注了事件
    private $observers = array();

    /**
     * 添加觀察者
     */
    function addObserver(Observer $observer){
        $this->observers[] = $observer;
    }

    /**
     *逐個通知觀察者進行更新的操作
     */
    function notify(){
        foreach($this->observers as $observer){
            $observer->update();
        }
    }
}
Observer.php
<?php
namespace Baobab;
/**
 * Class Observer 觀察者,觀察的對象是事件發生者
 * @package Baobab
 */
interface Observer{
    /**
     * @param null $event_info  事件的信息
     * 表示事件發生後進行更新的操作
     */
    function update($event_info = null);
}

index.php

class Event extends \Baobab\EventGenerator{
    /**
     *觸發一個新的事件
     */
    function trigger(){
        echo 'Event發生';
        $this->notify();
    }
}

/**
 * 觀察者1
 */
class Observer1 implements \Baobab\Observer{
    function Update($event_info = null){
        echo '更新操作代碼1';
    }
}
/**
* 觀察者2
*/ class Observer2 implements \Baobab\Observer{ function Update($event_info = null){ echo '更新操作代碼2'; } } $event = new Event(); $event->addObserver(new Observer1()); $event->addObserver(new Observer2()); $event->trigger();

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved