<?php
//观察者模式
//适用场景:订阅者通知
//自己对观察者模式对理解:
// 需求:有事情变化你要通知我
// 实现:
// 1、要通知对人必须在我这里注册,否则我不知道要通知谁。
// 2、想要获取通知的人必须遵守我的规则,实现我指定的通知事件,不然我没办法统一通知
// 3、事件发生的时候我会逐一通知你们。
//定义一个事件产生抽象类
abstract class genEvent
{
private $ob_servers = [];
//增加观察者
public function addObs($ob_server)
{
$this->ob_servers[] = $ob_server;
}
//通知
public function notify()
{
if(!empty($this->ob_servers))
{
foreach($this->ob_servers as $ob_server)
{
$ob_server->update(); // 逐个调用
}
}
}
}
//定义观察者接口
interface obServer{
public function update($event_info = null);
}
class obServer1 implements obServer{
public function update($event_info = null){
echo "观察者1 收到执行通知\n";
}
}
class obServer2 implements obServer{
public function update($event_info = null){
echo "观察者2 收到执行通知\n";
}
}
class event extends genEvent{
//事件触发
public function trigger()
{
$this->notify();
}
}
//实现
$event = new event();
$event->addObs(new obServer1());
$event->addObs(new obServer2());
$event->trigger();