PHP 利用SPL实现观察者模式

<?php

//-----------------------------------------------
// 利用SPL实现观察者模式
//-----------------------------------------------


/**
 * 订单管理系统
 * Class OmsObserver
 */
class  OmsObserver implements SplObserver
{

    public function update(SplSubject $subject) {
        echo ' module-name: oms  order-no: ' . $subject->getOrderNumber();
        // todo
        echo ' result: send success' . PHP_EOL;
    }
}

/**
 * 仓库管理系统
 * Class WmsObserver
 */
class  WmsObserver implements SplObserver
{

    public function update(SplSubject $subject) {
        echo ' module-name: wms  order-no: ' . $subject->getOrderNumber();
        // todo
        echo ' result: send success' . PHP_EOL;
    }
}

/**
 * 运输管理系统
 * Class TmsObserver
 */
class  TmsObserver implements SplObserver
{

    public function update(SplSubject $subject) {
        echo ' module-name: tms  order-no: ' . $subject->getOrderNumber();
        // todo
        echo ' result: send success' . PHP_EOL;
    }
}

class OrderCenterSubject implements SplSubject
{

    private $_observers;
    private $_orderNumber;

    public function __construct($orderNumber) {
        $this->_observers = new SplObjectStorage();
        $this->_orderNumber = $orderNumber;
    }

    public function attach(SplObserver $observer) {
        $this->_observers->attach($observer);
    }

    public function detach(SplObserver $observer) {
        $this->_observers->detach($observer);
    }

    public function notify() {
        foreach ($this->_observers as $observer) {
            $observer->update($this);
        }
    }

    public function getOrderNumber() {
        return $this->_orderNumber;
    }

}

//测试
$omsObserver = new OmsObserver();
$wmsObserver = new WmsObserver();
$tmsObserver = new TmsObserver();
$orderCenterSubject = new OrderCenterSubject("10030522161715");
$orderCenterSubject->attach($omsObserver);
$orderCenterSubject->attach($wmsObserver);
$orderCenterSubject->attach($tmsObserver);
$orderCenterSubject->notify();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容