1. 观察者,在观察的主体发生状态改变时,做出对应的动作<br />定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖与他的对象都得到通知并被自动更新<br />每个观察者本身有更新状态的方法,多个观察者添加注册到观察者类中,当主体修改时,调用观察者类,根据观察类中的观察者,调用观察者的更新方法进行更新操作,
    1. nterface Observer
    2. {
    3. public function update($obj);
    4. }
    5. class Message implements Observer
    6. {
    7. //....
    8. function update($obj)
    9. {
    10. echo '发送新订单短信(' . $obj->mobile . ')通知给商家!';
    11. }
    12. //....
    13. }
    14. class Goods implements Observer
    15. {
    16. //....
    17. public function update($obj)
    18. {
    19. echo '修改商品' . $obj->goodsId . '的库存!';
    20. }
    21. //....
    22. }
    23. class Order
    24. {
    25. private $observers = [];
    26. public function attach($ob)
    27. {
    28. $this->observers[] = $ob;
    29. }
    30. public function detach($ob)
    31. {
    32. $position = 0;
    33. foreach ($this->observers as $ob) {
    34. if ($ob == $observer) {
    35. array_splice($this->observers, ($position), 1);
    36. }
    37. ++$position;
    38. }
    39. }
    40. public function notify($obj)
    41. {
    42. foreach ($this->observers as $ob) {
    43. $ob->update($obj);
    44. }
    45. }
    46. public function sale()
    47. {
    48. // 商品卖掉了
    49. // ....
    50. $obj = new stdClass();
    51. $obj->mobile = '13888888888';
    52. $obj->goodsId = 'Order11111111';
    53. $this->notify($obj);
    54. }
    55. }
    56. $message = new Message();
    57. $goods = new Goods();
    58. $order = new Order();
    59. $order->attach($message);
    60. $order->attach($goods);
    61. // 订单卖出了!!
    62. $order->sale();