经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
php —— 观察者模式
来源:cnblogs  作者:老实不老实  时间:2018/10/11 9:26:27  对本文有异议
  1. 观察者模式

当一个对象或事件发生变化时,其他的对象实例或者事件需要跟着发生相应改动或者进行相应动作的一对多关系可进行应用。

如:订单状态变化(支付完成)后需要进行,短信通知,公众号推送等一系列相应操作时。可将订单类看成一个被观察者,短信通知类,公众号通知,app推送等相关通知类视为观察者。

具体实现和调用步骤:

  分别实现 SplSubject、SplObserver类,在SplSubject实现类中实例化SplObjectStorage类进行对象的存储

  将观察者对象分别加入被观察者对象进行存储  

  在对象发生变化后调用通知方法,逐个通知观察者对象进行相关操作

好处:

  避免进行无数的判断操作,造成代码臃肿,不美观

  降低耦合度

  1. <?php
  2. header("Content-Type: text/html;charset=utf-8");
  3. class test implements SplSubject{//被观察者类
  4.  
  5. public $_observer;
  6. public $num;
  7. public $ad;
  8. function __construct()
  9. {
  10. $this->_observer = new SplObjectStorage();
  11. }
  12. public function run(){
  13. $this->notify();
  14. print_r($this);
  15. }
  16. public function attach(SplObserver $observer)
  17. {
  18. // TODO: 添加观察者对象
  19. $this->_observer->attach($observer);
  20. }
  21. public function detach(SplObserver $observer)
  22. {
  23. // TODO: Implement detach() method.
  24. $this->_observer->detach($observer);
  25. }
  26. public function notify()
  27. {
  28. // TODO: Implement notify() method.
  29. foreach ($this->_observer as $obj){
  30. $obj->update($this);
  31. }
  32. }
  33. }
  34. class checkNum implements SplObserver{
  35. public function update(SplSubject $subject)
  36. {
  37. // TODO: 根据通知更新
  38. $subject->num = "检查次数";
  39. }
  40. }
  41. class checkAd implements SplObserver{
  42. public function update(SplSubject $subject)
  43. {
  44. // TODO: 根据通知更新
  45. $subject->ad = "检查广告";
  46. }
  47. }
  48. $test = new test();
  49. $test->attach(new checkNum());
  50. $test->attach(new checkAd());
  51. $test->run();
观察者模式

 如有错误,还望大神指出

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

本站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号