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 JSON格式数据交互实例代码详解
Jan 13 PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
Sep 01 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
php微信开发之关键词回复功能
Jun 13 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
基于PHP实现用户在线状态检测
Nov 10 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中session_unset与session_destroy的区别分析
2011/06/16 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
2018/11/06 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
使用Python的turtle模块画图的方法
2017/11/15 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
python 多线程重启方法
2019/02/18 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python 爬虫性能相关总结
2020/08/03 Python
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
几个MySql的面试题
2013/04/22 面试题
生产副总岗位职责
2013/11/28 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
体育活动总结
2015/02/04 职场文书
中班下学期个人总结
2015/02/12 职场文书
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang