首页 / 设计模式 / php设计模式-观察者模式
php设计模式-观察者模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php设计模式-观察者模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2697字,纯文字阅读大概需要4分钟。
内容图文
![php设计模式-观察者模式](/upload/InfoBanner/zyjiaocheng/762/de1728ca09d3407e80439772dfc47670.jpg)
PHP观察者模式
1、什么是观察者模式?
从面向过程的角度来看,首先是观察者向主题注册,注册完之后,主题再通知观察者做出相应的操作,整个事情就完了
从面向对象的角度来看,主题提供注册和通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个同一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低
流程图如下:
2、为什么要用观察者模式?
观察者模式更多体现了两个独立的类利用接口完成一件本应该很复杂的事情。不利用主题类的话,我们还需要不断循环创建实例,执行操作。而现在只需要创建实例就好,执行操作的事儿只需要调用一次通知的方法就好啦
3、应用场景
当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。
4、示例代码
/** * @purpose: 观察者接口, 定义观察者具体需要执行的方法,当然方法名和方法个数可以自定义 * Interface Observer */ interface Observer { /** * @purpose: 广播通知后,所有已注册的观察者都需要执行该方法。 * @return mixed */ public function eat(); } /** * @purpse: 定义猫猫类,继承观察者接口,实现具体细节 * Class Cat */ class Cat implements Observer{ public function eat(){ echo 'Cat eat fish'; } } /** * @purpse: 定义狗狗类,继承观察者接口,实现具体细节 * Class Dog */ class Dog implements Observer{ public function eat(){ echo 'Dog eat bones'; } } /** * @purpose: 主题接口, 定义添加观察者和广播通知的方法 * Interface Notify */ interface Subject { /** * @purpose: 添加观察者 * @param string $key 给所添加的观察者的一个唯一 key,方便从注册树中移除观察者 * @param Observer $observer 观察者对象 * @return mixed */ public function addObserver($key, Observer $observer); /** * @purpose: 从注册树中移除观察者 * @param string $key 给所添加的观察者的一个唯一 key,方便从注册树中移除观察者 * @return mixed */ public function removeObserver($key); /** * @purpose: 广播通知以注册的观察者 * @return mixed */ public function notify(); } /** * @purpose: 实现主体接口,主要就是添加观察者和广播通知观察者 * Class Action */ class Action implements Subject { /** * @var array 保存所有已注册的观察者 */ public $_observer = []; /** * @purpose: 添加观察者 * @param string $key 给所添加的观察者的一个唯一 key,方便从注册树中移除观察者 * @param Observer $observer 观察者对象 * @return mixed */ public function addObserver($key, Observer $observer) { $this->_observer[$key] = $observer; } /** * @purpose: 从注册树中移除观察者 * @param string $key 给所添加的观察者的一个唯一 key,方便从注册树中移除观察者 * @return mixed */ public function removeObserver($key) { unset($this->_observer[$key]); } /** * @purpose: 广播通知以注册的观察者,对注册树进行遍历,让每个对象实现其接口提供的操作 * @return mixed */ public function notify() { foreach ($this->_observer as $observer) { $observer->eat(); } } }
本文参考了博友的博客:https://www.cnblogs.com/houdabao/p/9567331.html
如有转载请注明出处:https://www.cnblogs.com/chrdai/p/11184221.html
内容总结
以上是互联网集市为您收集整理的php设计模式-观察者模式全部内容,希望文章能够帮你解决php设计模式-观察者模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。