php设计模式之观察者模式
2022/1/25 17:06:08
本文主要是介绍php设计模式之观察者模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
理解:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码
场景:比如用户注册后需要增加一个邮件推送的功能,过几天加送优惠券的功能,这时将代码都写在登录里就非常的偶尔的,或者比如要根据用户不同的角色给出不同的处理方式(势利眼的观察者看人下菜)
,这些都可以使用观察者模式。
// 被观察者接口 interface Subject{ public function register(Observer $observer); //添加(注册)观察者对象 public function detach(Observer $observer); //删除观察者对象 public function notify(); //通知观察者执行相应功能 } // 观察者接口 interface Observer{ public function watch(); //观察者要执行的方法 } // 被观察者继承类 class Action implements Subject{ public $_observers=array(); //用于存储观察者对象 //用于添加(注册)观察者对象 public function register(Observer $observer){ $this->_observers[]=$observer; } //用于删除观察者对象 public function detach(Observer $observer){ $index = array_search($observer, $this->_observers); if ($index === FALSE || ! array_key_exists($index, $this->_observers)) { return FALSE; } unset($this->_observers[$index]); return TRUE; } //通知各观察者 public function notify(){ //****重点,其实就是循环中执行各观察这对象的watch方法,不同功能方法内容不同但方法名相同 foreach ($this->_observers as $observer) { $observer->watch(); } } } // cat观察者继承类 class Cat implements Observer{ public function watch(){ echo "Cat likes fish <hr/>"; } } //dog观察者继承类 class Dog implements Observer{ public function watch(){ echo "Dog likes ball<hr/>"; } } //people观察者继承类 class People implements Observer{ public function watch(){ echo "People likes mobile<hr/>"; } } // 应用实例 //创建一个事件 $action=new Action(); //为事件增加旁观者 $action->register(new Cat()); $action->register(new People()); $action->register(new Dog()); //执行事件 通知旁观者 $action->notify();
观察者就是定义各种功能的对象,如给第一次登录的用户发红包,给用户最新的10条文章推送,给非vip用户推送10条需要注册才能打开的视频诱导用户开通vip,
一个规则就是一个观察者,增加新规则就增加新观察者
,被观察者对象要实现的就是 将添加(注册)的观察者对象存储起来并逐个通知执行观察者各自的功能
参考自:https://www.cnblogs.com/onephp/p/6108344.html
这篇关于php设计模式之观察者模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28怎么把PHP程序打包?-icode9专业技术文章分享
- 2024-09-28怎么用Phar打包PHP程序?-icode9专业技术文章分享
- 2024-09-13手动在github上下载的mfpt包,怎么放到thinkphp5.0框架并正常使用-icode9专业技术文章分享
- 2024-09-05python的<class 'bytearray'>相当于php的哪个数据类型-icode9专业技术文章分享
- 2024-09-05php 导出银行卡号避免科学技术法的方法-icode9专业技术文章分享
- 2024-08-30什么样的php代码质量差被称为垃圾代码-icode9专业技术文章分享
- 2024-08-30用 PHP 调用拼多多的接口以获取订单状态消息的步骤方法和代码示例-icode9专业技术文章分享
- 2024-08-27phpunit单元测试框架的入门和使用方法介绍-icode9专业技术文章分享
- 2024-08-24PHP 中date("w") 周一是多少-icode9专业技术文章分享
- 2024-08-14thinkphp8.0获取域名或主机名方法-icode9专业技术文章分享