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面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
Sep 30 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
php判断对象是派生自哪个类的方法
Jun 20 PHP
百度地图API使用方法详解
Aug 25 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
Mar 17 PHP
php格式化json函数示例代码
May 12 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
浅谈PHP匿名函数和闭包
Mar 08 PHP
Laravel开启跨域请求的方法
Oct 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
ADODB类使用
2006/11/25 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
php操作access数据库的方法详解
2017/02/22 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
Python使用chardet判断字符编码
2015/05/09 Python
python实现读取命令行参数的方法
2015/05/22 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
Python面向对象程序设计示例小结
2019/01/30 Python
django 单表操作实例详解
2019/07/30 Python
python django生成迁移文件的实例
2019/08/31 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
小学生家长评语集锦
2014/01/30 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android