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面向对象分析设计的经验原则
Sep 20 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
php数组转成json格式的方法
Mar 09 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
浅谈json_encode用法
2015/03/05 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
php简单获取复选框值的方法
2016/05/11 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
seajs下require书写约定实例分析
2018/05/16 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
Python-opencv 双线性插值实例
2020/01/17 Python
python绘制封闭多边形教程
2020/02/18 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
UNIX文件系统分类
2014/11/11 面试题
给学校建议书范文
2014/05/13 职场文书
销售队伍口号
2014/06/11 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
2014年度工作总结报告
2014/12/15 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
2016党校学习心得体会
2016/01/07 职场文书