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