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动态生成VRML网页
Oct 09 PHP
PHP中动态显示签名和ip原理
Mar 28 PHP
php学习 字符串课件
Jun 15 PHP
页面乱码问题的根源及其分析
Aug 09 PHP
PHP字符串长度计算 - strlen()函数使用介绍
Oct 15 PHP
PHP反向代理类代码
Aug 15 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
PHP耦合设计模式实例分析
Aug 08 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
php 分页函数multi() discuz
2009/06/21 PHP
php基础学习之变量的使用
2011/06/09 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
python opencv之SIFT算法示例
2018/02/24 Python
python 有效的括号的实现代码示例
2019/11/11 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
python实现AdaBoost算法的示例
2020/10/03 Python
工厂车间标语
2014/06/19 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
2015年保送生自荐信
2015/03/24 职场文书
初一语文教学反思
2016/03/03 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers