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 相关文章推荐
APMServ使用说明
Oct 23 PHP
PHP生成HTML静态页面实例代码
Aug 31 PHP
如何用C语言编写PHP扩展的详解
Jun 13 PHP
php curl模拟post请求小实例
Nov 13 PHP
php实现读取超大文件的方法
Jul 28 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
CI框架常用函数封装实例
Nov 21 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 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小偷的核心程序
2007/04/09 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
php报错502badgateway解决方法
2019/10/11 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
用YUI做了个标签浏览效果
2007/02/20 Javascript
提高网站信任度的技巧
2008/10/17 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
javascript实现颜色渐变的方法
2013/10/30 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
axios封装与传参示例详解
2020/10/18 Javascript
python调用cmd命令行制作刷博器
2014/01/13 Python
Django 多环境配置详解
2019/05/14 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
python实现飞船大战
2020/04/24 Python
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
求职信模版
2013/11/30 职场文书
大学生学习自我评价
2014/01/13 职场文书
中秋手机店促销方案
2014/06/16 职场文书
代收款委托书范本
2014/10/01 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
实习指导教师评语
2014/12/30 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android