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 相关文章推荐
一个显示天气预报的程序
Oct 09 PHP
PHP编程与应用
Oct 09 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
Oct 13 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
PHP 在数组中搜索给定的简单实例 array_search 函数
Jun 13 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
PHP jQuery+Ajax结合写批量删除功能
May 19 PHP
php表单文件iframe异步上传实例讲解
Jul 26 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
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php header函数的常用http头设置
2015/06/25 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
巧用局部变量提升javascript性能
2014/02/24 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
利用Python如何生成hash值示例详解
2017/12/20 Python
对pandas中apply函数的用法详解
2018/04/10 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python代码中怎么换行
2020/06/17 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
入团者的自我评价分享
2013/12/02 职场文书
社区志愿者心得体会
2014/01/03 职场文书
房屋买卖协议书
2014/04/10 职场文书
关于保护环境的建议书
2014/08/26 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
感谢信
2019/04/11 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
SSM VUE Axios详解
2021/10/05 Vue.js
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python