观察者,在观察的主体发生状态改变时,做出对应的动作<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();