观察者模式

观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象(A对象)事件发生时通知多个 ‘观察者’,即观察A对象的其他对象。

代码示例

注:PHP 中包含几个内置接口 SplSubject SplObserver 它们能让你的观察器模式实现与其他 PHP 代码兼容

<?php

class subject implements SplSubject
{
    public $state;

    //存储订阅者,通知时候遍历使用
    private $observers;

    public function __construct()
    {
        $this->observers = new SplObjectStorage();
    }

    //添加订阅对象
    public function attach(SplObserver $observer)
    {
        // TODO: Implement attach() method.
        $this->observers->attach($observer);
    }
    
    //删除订阅对象
    public function detach(SplObserver $observer)
    {
        // TODO: Implement detach() method.
        $this->observers->detach($observer);
    }
    
    //遍历通知订阅者
    public function notify()
    {
        // TODO: Implement notify() method.
        foreach ($this->observers as $observer){
            $observer->update($this);
        }
    }
    
    //业务逻辑,业务变更时通知关联业务作出对应变更
    public function someBusinessLogic()
    {
        //模仿业务变更
        $this->state = mt_rand(0,10);
        
        //通知订阅者
        $this->notify();
    }
}

//订阅者A
class  concreateObserverA implements SplObserver
{
    public function update(SplSubject $subject)
    {
        // TODO: Implement update() method.
        echo 'A 关联业务变更';
    }
}

//订阅者B
class  concreateObserverB implements SplObserver
{
    public function update(SplSubject $subject)
    {
        // TODO: Implement update() method.
        echo 'B 关联业务变更';
    }
}

//客户端
$subject = new subject();

$conA = new concreateObserverA();
//添加订阅者A
$subject->attach($conA);

$conB = new concreateObserverB();
//添加订阅者B
$subject->attach($conB);

//业务逻辑变更后,通知订阅者使订阅者逻辑变更
$subject->someBusinessLogic();
原文地址:https://www.cnblogs.com/suojian/p/14023448.html