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 短链接算法收集与分析
Dec 30 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
PHP编程风格规范分享
Jan 15 PHP
php截取中文字符串函数实例
Feb 23 PHP
php实现的操作excel类详解
Jan 15 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 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使用正则过滤js脚本代码实例
2014/05/10 PHP
php实现复制移动文件的方法
2015/07/29 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
控制打印时页眉角的代码
2007/02/08 Javascript
Javascript 解疑
2009/11/11 Javascript
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
node.js中的fs.unlinkSync方法使用说明
2014/12/15 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
详解Angular的8个主要构造块
2017/06/20 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
浅谈python日志的配置文件路径问题
2018/04/28 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python目录和文件处理总结详解
2019/09/02 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
建筑班组长岗位职责
2014/01/02 职场文书
毕业生求职信的经典写法
2014/01/31 职场文书
买房委托公证书
2014/04/08 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
Python合并多张图片成PDF
2021/06/09 Python
如何用python清洗文件中的数据
2021/06/18 Python
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers