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 相关文章推荐
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
php 开发中加密的几种方法总结
Mar 22 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 PHP
thinkphp5 模型实例化获得数据对象的教程
Oct 18 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 强制下载文件代码
2010/10/24 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
PHP之预定义接口详解
2015/07/29 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
[06:45]2018DOTA2亚洲邀请赛 4.5 SOLO赛 Sccc vs Maybe
2018/04/06 DOTA
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
bat和python批量重命名文件的实现代码
2016/05/19 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
结构工程研究生求职信
2013/10/13 职场文书
阿德的梦教学反思
2014/02/06 职场文书
运动会入场解说词
2014/02/07 职场文书
车间机修工岗位职责
2014/02/28 职场文书
2014年父亲节活动方案
2014/03/06 职场文书