分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

php实现观察者模式

发布时间:2023-09-06 01:44责任编辑:苏小强关键词:暂无标签

观察者模式 (observer Pattern): 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。也叫发布-订阅模式

(一)为什么需要观察者模式

1,一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作

2,完美的将观察者和被观察的对象分离开,使得每个类将重点放在某一个功能上,一个对象只做一件事情。

3,观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

(二)观察者模式 UML图

(三)简单实例

观察者模式也叫发布订阅模式,如果说我们现在在做一个系统。我们让所有客户端订阅我们的服务端,那么当我们的服务端有更新信息的时候,就通知客户端去更新。这里的服务端就是被观察者,客户端就是观察者。

<?php//抽象被观察者abstract class Subject{ ???//定义一个观察者数组 ???private $observers = array(); ???//增加观察者方法 ???public function addObserver(Observer $observer){ ???????$this->observers[] = $observer; ???????echo "添加观察者成功".PHP_EOL; ???} ???//删除观察者方法 ???public function delObserver(Observer $observer){ ???????$key = array_search($observer,$this->observers); //判断是否有该观察者存在 ???????if($observer===$this->observers[$key]) { //值虽然相同 但有可能不是同一个对象 ,所以使用全等判断 ???????????unset($this->observers[$key]); ???????????echo ‘删除观察者成功‘.PHP_EOL; ???????} else{ ???????????echo ‘观察者不存在,无需删除‘.PHP_EOL; ???????} ???} ???//通知所有观察者 ???public function notifyObservers(){ ???????foreach($this->observers as $observer){ ???????????$observer->update(); ???????} ???}}//具体被观察者 服务端class Server extends Subject{ ???//具体被观察者业务 发布一条信息,并通知所有客户端 ???public function publish(){ ???????echo ‘今天天气很好,我发布了更新包‘.PHP_EOL; ???????$this->notifyObservers(); ???}}//抽象观察者接口Interface Observer{ ???public function update();}//具体观察者类//微信端class Wechat implements Observer{ ???public function update(){ ???????echo ‘通知已接收,微信更新完毕‘.PHP_EOL; ???}}//web端class Web implements Observer{ ???public function update(){ ???????echo ‘通知已接收,web端系统更新中‘.PHP_EOL; ???}}//app端class App implements Observer{ ???public function update(){ ???????echo ‘通知已接收,APP端稍后更新‘.PHP_EOL; ???}}//实例化被观察者$server = new Server ;//实例化观察者$wechat = new Wechat ;$web = new Web ;$app = new App;//添加被观察者$server->addObserver($wechat);$server->addObserver($web);$server->addObserver($app);//被观察者 发布信息$server->publish();//删除观察者$server->delObserver($wechat);//再次发布信息$server->publish();//尝试删除一个未添加成观察者的对象$server->delObserver(new Web);//再次发布信息$server->publish();

观察者模式的一个关键词就是触发,被观察者的动作触发观察者的做出对应的响应。观察者模式的另一个常用领域在于插件系统。

在PHP中观察者的另一种实现方式,是通过实现SplSubject接口和SplObserver。

php实现观察者模式

原文地址:https://www.cnblogs.com/lijintao1025/p/8518043.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved