/**
* 观察者模式
观察者监听事件发生者(被观察者)
如果事件发生者发生改变的话要通知所有的观察者
*/
class Event extends EventGenerator
{
/**
* eg:用户下单之后->商品库存减1->通知商家有新订单->通知快递小哥有新快递->通知客户订单已经生效
*/
function tirgger()
{
echo "用户下单了<br />\n";
$this->notify();
}
}
// 事件产生者(被观察者)基类
abstract class EventGenerator
{
// 观察者数组
private $servers;
// 增加观察者
function addObServer( Observer $server )
{
$this->servers[] = $server;
}
// 通知观察者
function notify()
{
foreach ($this->servers as $server) {
$server->update();
}
}
}
// 观察者基类
interface Observer
{
function update();
}
// 商品
class Goods implements Observer
{
function update()
{
echo "库存减1<br />\n";
}
}
// 商家
class Store implements Observer
{
function update()
{
echo "有客户下单啦<br />\n";
}
}
// 快递
class Express implements Observer
{
function update()
{
echo "您有新订单啦,请及时配送<br />\n";
}
}
// 快递
class User implements Observer
{
function update()
{
echo "您的订单配送中,请耐心等待<br />\n";
}
}
$event = new Event();
$event->addObServer( new Goods );
$event->addObServer( new Store );
$event->addObServer( new Express );
$event->addObServer( new User );
$event->tirgger();
来源:https://www.cnblogs.com/JiangBigShrimp/p/11101332.html