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中的一个中文字符串截取函数
Feb 14 PHP
php学习之简单计算器实现代码
Jun 09 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP程序员基本要求和必备技能
May 09 PHP
dedecms中使用php语句指南
Nov 13 PHP
php 使用array函数实现分页
Feb 13 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
详解PHP编码转换函数应用技巧
Oct 22 PHP
Yii2单元测试用法示例
Nov 12 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
基于PHP的登录和注册的功能的实现
Aug 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
JS中Iframe之间传值的方法
2013/03/11 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
python 星号(*)的多种用途
2020/09/21 Python
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
业务经理的岗位职责
2013/11/16 职场文书
行政人员岗位职责
2013/12/08 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
python如何正确使用yield
2021/05/21 Python
Python 用户输入和while循环的操作
2021/05/23 Python
Go语言应该什么情况使用指针
2021/07/25 Golang