观察者模式

观察者模式 发布/订阅模式:当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新

https://www.jianshu.com/p/32d56565389c

<?php

/**
 * 声明观察者接口,只有一个update方法,事件更新之后触发
 * Interface Observe
 */
interface Observer{
    public function update();
}

/**
 * 声明抽象类,用于被子类继承
 * Class Event
 */
abstract class Generators{

    //观察者列表
    private $observers = [];
    //添加观察者
    public function addObserver(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    //删除观察者
    public function removeObserver($observer)
    {
        if($observer){
            $key = array_search($observer, $this->observers);
            if($key){
                array_splice($this->observers, $key, 1);
            }
        }
    }

    //执行操作
    public function notify(){
        foreach ($this->observers as $v){
            $v->update();
        }
    }
}

class Event extends Generators
{
    public function action(){
        $this->notify();
    }
}

//观察者1
class observer1 implements Observer
{
    public function update()
    {
        echo '我是第一个观察者<br />';
    }
}
class observer2 implements Observer
{
    public function update()
    {
        echo '我是第二个观察者<br />';
    }
}
$event = new Event();
//添加观察者
$event->addObserver(new Observer1());
$event->addObserver(new Observer2());

//被观察者做出动作时,观察者就会收到相应通知
$event->action();
posted @ 2023-02-11 19:56  sunkaila  阅读(24)  评论(0)    收藏  举报