观察者模式 发布/订阅模式:当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新
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();
标签:function,observer,观察者,模式,public,observers,event
From: https://www.cnblogs.com/kaikaiya/p/17112460.html