观察者,在观察的主体发生状态改变时,做出对应的动作<br />定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖与他的对象都得到通知并被自动更新<br />每个观察者本身有更新状态的方法,多个观察者添加注册到观察者类中,当主体修改时,调用观察者类,根据观察类中的观察者,调用观察者的更新方法进行更新操作,
nterface Observer{ 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) { 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();