php 设计模式之 观察者
1. 观察者模式
定义对象一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
观察者和被观察者都是抽象耦合的
建立一套触发机制
2. 类图
3. 实列
interface Observer { // 定义观察者接口,里面有 update 方法
public function update($obj);
}
class Message implements Observer { // 具体的观察者
function update($obj) {
echo '发送新订单短信(' . $obj->mobile . ')通知给商家';
}
}
class Goods implements Observer { // 观察者
public function update($obj) {
echo '修改商品' . $obj->goodsId . '的库存';
}
}
class Order { // 管理观察者类
private $observers = []; // 观察者的集合
public function attach($ob) { // 添加观察者
$this->observers[] = $ob;
}
public function detach($ob) { // 删除观察者
$position = 0;
foreach ($this->observers as $ob) {
if ($ob == $observer) {
array_splice($this->observers, ($position), 1);
}
++$position;
}
}
public function notify($obj) { // 通知,遍历集合间所有内容,调用update
foreach ($this->observers as $ob) {
$ob->update($obj);
}
}
public function sale() { // 执行类
$obj = new stdClass();
$obj->mobile = '13888888888';
$obj->goodsId = 'Order11111111';
$this->notify($obj); // 通知所有观察者,发送短信,修改库存
}
}
$message = new Message();
$goods = new Goods();
$order = new Order();
$order->attach($message);
$order->attach($goods);
$order->sale();
3. 应用场景
- 商品库存发生变化后,库存通知,短信通知
- php 的 spl 扩展

浙公网安备 33010602011771号