经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
PHP设计模式—观察者模式
来源:cnblogs  作者:幽篁晓筑  时间:2020/11/9 16:08:11  对本文有异议

 

定义:

观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

 

结构:

  • EventGenerator(抽象基类):负责添加观察者和通知观察者。
  • Event(具体事件类):当状态发生改变时,通知所有登记过的观察者,继承于EventGenerator。
  • Observer(观察者接口):为所有的具体观察者定义一个接口,在得到通知时更新自己。
  • Observer1(具体观察者):实现具体通知接口。
  • Client:客户端代码。

 

代码实例:

  1. /**
  2. * EventGenerator.php(抽象类)
  3. * Class EventGenerator
  4. */
  5. abstract class EventGenerator
  6. {
  7. private $observers = [];
  8. /**
  9. * 添加观察者
  10. */
  11. public function addObserver(Observer $observer)
  12. {
  13. $this->observers[] = $observer;
  14. }
  15. /**
  16. * 通知所有观察者
  17. */
  18. public function notify()
  19. {
  20. foreach ($this->observers as $observer) {
  21. $observer->update();
  22. }
  23. }
  24. }
  25. /**
  26. * Event.php(事件,当状态发生改变时,通知所有登记过的观察者)
  27. * Class Event
  28. */
  29. class Event extends EventGenerator
  30. {
  31. public function trigger()
  32. {
  33. echo "Event<br/>\n";
  34. $this->notify();
  35. }
  36. }
  37. /**
  38. * Observer.php(Observer 接口)
  39. * Interface Observer
  40. */
  41. interface Observer
  42. {
  43. public function update($event_info = null);
  44. }
  45. /**
  46. * Observer1.php(观察者1)
  47. * Class Observer1
  48. */
  49. class Observer1 implements Observer
  50. {
  51. public function update($event_info = null)
  52. {
  53. // TODO: Implement update() method.
  54. echo "通知观察者1<br/>\n";
  55. }
  56. }
  57. /**
  58. * Observer2.php(观察者2)
  59. * Class Observer2
  60. */
  61. class Observer2 implements Observer
  62. {
  63. public function update($event_info = null)
  64. {
  65. // TODO: Implement update() method.
  66. echo "通知观察者2<br/>\n";
  67. }
  68. }

客户端调用:

  1. $event = new Event();
  2. $event->addObserver(new Observer1());
  3. $event->addObserver(new Observer2());
  4. $event->trigger();

结果:

  1. Event
  2. 通知观察者1
  3. 通知观察者2

 

 

总结:

  • 一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的逻辑增加之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码。
  • 观察者模式实现了低耦合,非侵入式的通知与更新机制。
  • 当一个对象的改变需要同时改变其他对象,并且它不知道具体有多少对象有待改变时,应该使用观察者模式。

 

原文链接:http://www.cnblogs.com/woods1815/p/13839453.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号