真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PHP設(shè)計(jì)模式:觀察者模式

首先來看個(gè)栗子:

專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)南山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

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

        echo "后續(xù)業(yè)務(wù)更新邏輯1\r\n";

        echo "后續(xù)業(yè)務(wù)更新邏輯2\r\n";

        echo "后續(xù)業(yè)務(wù)更新邏輯3\r\n";
    }
}

場景:當(dāng)事件發(fā)生變化時(shí),觸發(fā)其他業(yè)務(wù)進(jìn)行相關(guān)的操作

特征1.所有業(yè)務(wù)代碼都是***式的,直接放置于核心業(yè)務(wù)當(dāng)中。

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

        

于是我們可以這樣假設(shè):

假如后續(xù)業(yè)務(wù)都是都是該事件的關(guān)注者,當(dāng)事件發(fā)生改變,只需要通知到觀察者即可。其他的工作由觀察者自行完成。

類似發(fā)布--訂閱這種模式。

代碼實(shí)現(xiàn):

步驟1.定義觀察者接口

步驟2.定義觀察者類

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

步驟4.定義事件場景類(繼承并實(shí)現(xiàn)事件產(chǎn)生器抽象類)

步驟5.實(shí)例化運(yùn)用
            實(shí)例化事件場景-->添加觀察者-->通知

            

定義觀察者接口

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

定義觀察者類

//定義多個(gè)觀察者
class Observer1 implements Observer
{
    public function update($eventInfo = null)
    {
        echo "觀察者1:準(zhǔn)備開始{$eventInfo}
 \r\n";     } } class Observer2 implements Observer {     public function update($eventInfo = null)     {         echo "觀察者2:準(zhǔn)備開始{$eventInfo}
 \r\n";     } }

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

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

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

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

定義事件場景類(繼承并實(shí)現(xiàn)事件產(chǎn)生器抽象類)

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

主業(yè)務(wù)場景的實(shí)現(xiàn)

$event = new Event();

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


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

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

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


網(wǎng)站名稱:PHP設(shè)計(jì)模式:觀察者模式
URL地址:http://weahome.cn/article/ighjeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部