/** * 观察者模式 观察者监听事件发生者(被观察者) 如果事件发生者发生改变的话要通知所有的观察者 */class Event extends EventGenerator{ /** * eg:用户下单之后->商品库存减1->通知商家有新订单->通知快递小哥有新快递->通知客户订单已经生效 */ function tirgger() { echo "用户下单了\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\n"; }}// 商家class Store implements Observer{ function update() { echo "有客户下单啦\n"; }}// 快递class Express implements Observer{ function update() { echo "您有新订单啦,请及时配送\n"; }}// 快递class User implements Observer{ function update() { echo "您的订单配送中,请耐心等待\n"; }}$event = new Event();$event->addObServer( new Goods );$event->addObServer( new Store );$event->addObServer( new Express );$event->addObServer( new User );$event->tirgger();