91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

PHP設計模式:觀察者模式

發布時間:2020-07-17 02:34:07 來源:網絡 閱讀:3966 作者:hgditren 欄目:web開發

首先來看個栗子:

//事件
class EventDemo
{
    //觸發了新事件
    public function trigger()
    {
        echo "Event happening\r";

        echo "后續業務更新邏輯1\r\n";

        echo "后續業務更新邏輯2\r\n";

        echo "后續業務更新邏輯3\r\n";
    }
}


場景:當事件發生變化時,觸發其他業務進行相關的操作

特征1.所有業務代碼都是***式的,直接放置于核心業務當中。

        2.耦合度太高,不便于管理維護。需要一件一件事去做處理。

        


于是我們可以這樣假設:

假如后續業務都是都是該事件的關注者,當事件發生改變,只需要通知到觀察者即可。其他的工作由觀察者自行完成。

類似發布--訂閱這種模式。



代碼實現:

步驟1.定義觀察者接口

步驟2.定義觀察者類

步驟3.定義事件產生器(抽象類)

步驟4.定義事件場景類(繼承并實現事件產生器抽象類)

步驟5.實例化運用
            實例化事件場景-->添加觀察者-->通知


            


定義觀察者接口

/**
 * 定義觀察者接口(觀察對象為事件發生者)
 *Interface Observer
 */
interface Observer
{
    /**
     * 事件發生時,進行更新操作
     * @param null $eventInfo 發生事件的信息
     * @return mixed
     */
    public function update($eventInfo = null);
}

定義觀察者類

//定義多個觀察者
class Observer1 implements Observer
{
    public function update($eventInfo = null)
    {
        echo "觀察者1:準備開始{$eventInfo}<br> \r\n";
    }
}

class Observer2 implements Observer
{
    public function update($eventInfo = null)
    {
        echo "觀察者2:準備開始{$eventInfo}<br> \r\n";
    }
}


定義事件產生器(抽象類)

/**
 * 事件產生者(抽象類)
 * Class EventGenerator
 */
abstract class EventGenerator
{
    private $observers = [];//事件的所有觀察者

    /**
     * 增加觀察者
     * @return mixed
     */
    public function addObserver(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    /**
     * 通知事件發生了,其他觀察者接到通知后更新業務邏輯
     * @return mixed
     */
    public function notify($eventInfo)
    {
        foreach ($this->observers as $observer) {
            $observer->update($eventInfo);
        }
    }
}


定義事件場景類(繼承并實現事件產生器抽象類)

/**
 * 定義事件類(繼承事件產生者類)
 * Class Event
 */
class Event extends EventGenerator
{
    public function trigger($eventInfo)
    {
        echo "事件 :{$eventInfo} 即將發生,通知觀察者們做好更新準備<br>\r\n";
        $this->notify($eventInfo);
        echo "<br/>";
    }
}


主業務場景的實現

$event = new Event();

//此處可以動態添加、刪除觀察者
$event->addObserver(new Observer1());
//$event->addObserver(new Observer2());


//此處可以發生任意多個事件
$event->trigger('吃飯');

$event->trigger('喝水');
$event->trigger('走路');


至此,我們可以看到在主業務場景中,只需要簡單的管理(添加、刪除)觀察者,管理(添加、刪除)發生事件就可以實現簡化代碼邏輯,減少耦合完成任務。更好的好處是,業務代碼解耦合,便于后期的維護擴展。

向AI問一下細節

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

AI

荆门市| 河西区| 聂荣县| 阿拉善盟| 高尔夫| 肇源县| 永年县| 宜春市| 双城市| 工布江达县| 综艺| 丁青县| 潮州市| 牡丹江市| 宁夏| 堆龙德庆县| 寿阳县| 威宁| 哈尔滨市| 泰宁县| 那坡县| 兰州市| 方城县| 水富县| 原平市| 曲周县| 佳木斯市| 泰安市| 汶上县| 石台县| 平舆县| 泸定县| 英山县| 辽宁省| 西乌珠穆沁旗| 镇江市| 仙游县| 遵化市| 瓮安县| 滁州市| 三都|