PHP观察者模式定义与用法实例分析


Posted in PHP onMarch 22, 2019

本文实例讲述了PHP观察者模式定义与用法。分享给大家供大家参考,具体如下:

我理解的观察者模式就是,当我们触发一个事件的时候,想要把这个操作告诉给我想要告诉的对象,让他们都执行这个操作,就是将他们绑定到这个事件下。

1.定义一个基类(用于添加观察者也就是我想要通知的对象,还有通知观察者)

EventGenerator.php

<?php
abstract class EventGenerator
{
  //存储观察者,因为可以有多个要通知的对象,所以是一个数组
  private $observers = array();
  //添加观察者,也就是我想要通知的对象
  public function addObserver($observer)
  {
    $this->observers[] = $observer;
  }
  //通知观察者
  public function notify()
  {
    //取出所有的对象去执行操作
    foreach($this->observers as $observer)
    {
      //这里我写一个update方法,这里就要求我所有的通知对象必须要有update操作,所以一会我会定义一个借口,让所有的观察者强制实现这个方法
      $observer->update();
    }
  }
}
?>

定义接口文件,让所有观察者实现update方法Observer.php

<?php
interface Observer
{
  function update();
}
?>

定义实现观察者模式的文件Event.php

<?php
header('Content-Type:text/html;charset=utf-8');
define('BASEDIR', __DIR___);
require 'Config.php';
spl_autoload_register('Config::autoload');
//定义事件类继承基类
class Event extends EventGenerator
{
  //当触发这个事件的时候通知所有的观察者
  public function trigger()
  {
    echo '我要开始更新了啊!<br/>\n';
    //基类的通知方法
    $this->notify();
  }
}
//添加观察者1
class Observer1 implements Observer
{
  public function update()
  {
    echo '我是观察者1,我收到你的通知了!我要干我该干的了!<br/>\n';
  }
}
//添加观察者2
class Observer2 implements Observer
{
  public function update()
  {
    echo '我是观察者2,我收到你的通知了!我要干我该干的了!<br/>\n';
  }
}
//下面就要开始测试了!
$event = new Event();
//添加观察者到这个事件里
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
//执行trigger操作
$event->trigger();
//这时候就会显示!
//我要开始更新了啊!
//我是观察者1,我收到你的通知了!我要干我该干的了!
//我是观察者2,我收到你的通知了!我要干我该干的了!
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP将数据导入到Foxmail
Oct 09 PHP
PHP Smarty生成EXCEL文档的代码
Aug 23 PHP
php array_search() 函数使用
Apr 13 PHP
PHP JSON格式数据交互实例代码详解
Jan 13 PHP
深入解析php之sphinx
May 15 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
laravel自定义分页效果
Jul 23 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP文件上传小程序 适合初学者学习!
May 23 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 #PHP
PHP中$GLOBALS与global的区别详解
Mar 21 #PHP
PHP压缩图片功能的介绍
Mar 21 #PHP
PHP应用跨时区功能的实现方法
Mar 21 #PHP
PHP时间函数使用详解
Mar 21 #PHP
PHP抽象类与接口的区别详解
Mar 21 #PHP
PHP CURL使用详解
Mar 21 #PHP
You might like
把77A收信机改造成收音机
2021/03/02 无线电
PHP HTML代码串 截取实现代码
2009/06/29 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
2012/07/22 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
jquery CSS选择器笔记
2010/03/29 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python与php实现分割文件代码
2017/03/06 Python
python使用turtle库绘制树
2018/06/25 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
python 读取串口数据的示例
2020/11/09 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
CSS 3.0 结合video视频实现的创意开幕效果
2020/06/01 HTML / CSS
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
放飞理想演讲稿
2014/09/09 职场文书
医德医魂心得体会
2014/09/11 职场文书
土地转让协议书
2014/09/27 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
《搭石》教学反思
2016/02/18 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server