PHP观察者模式示例【Laravel框架中有用到】


Posted in PHP onJune 15, 2018

本文实例讲述了PHP观察者模式。分享给大家供大家参考,具体如下:

<?php
//观察者模式
//抽象主题类
interface Subject
{
  public function attach(Observer $Observer);
  public function detach(Observer $observer);
  //通知所有注册过的观察者对象
  public function notifyObservers();
}
//具体主题角色
class ConcreteSubject implements Subject
{
  private $_observers;
  public function __construct()
  {
    $this->_observers = array();
  }
  //增加一个观察者对象
  public function attach(Observer $observer)
  {
    return array_push($this->_observers,$observer);
  }
  //删除一个已经注册过的观察者对象
  public function detach(Observer $observer)
  {
    $index = array_search($observer,$this->_observers);
    if($index === false || !array_key_exists($index, $this->_observers)) return false;
    unset($this->_observers[$index]);
    return true;
  }
  //通知所有注册过的观察者
  public function notifyObservers()
  {
    if(!is_array($this->_observers)) return false;
    foreach($this->_observers as $observer)
    {
      $observer->update();
    }
    return true;
  }
}
//抽象观察者角色
interface Observer
{
  //更新方法
  public function update();
}
//观察者实现
class ConcreteObserver implements Observer
{
  private $_name;
  public function __construct($name)
  {
    $this->_name = $name;
  }
  //更新方法
  public function update()
  {
    echo 'Observer'.$this->_name.' has notify';
  }
}
$Subject = new ConcreteSubject();
//添加第一个观察者
$observer1 = new ConcreteObserver('baixiaoshi');
$Subject->attach($observer1);
echo 'the first notify:';
$Subject->notifyObservers();
//添加第二个观察者
$observer2 = new ConcreteObserver('hurong');
echo '<br/>second notify:';
$Subject->attach($observer2);
/*echo $Subject->notifyObservers();
echo '<br/>';
$Subject->notifyObservers();*/
?>

运行结果:

the first notify:Observerbaixiaoshi has notify
second notify:

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
PHP实现的增强性mhash函数
May 27 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
Jul 28 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
PHP堆栈调试操作简单示例
Jun 15 #PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 #PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 #PHP
基于swoole实现多人聊天室
Jun 14 #PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 #PHP
php实现微信公众平台发红包功能
Jun 14 #PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 #PHP
You might like
PHP文件读取功能的应用实例
2015/05/08 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
Zend Framework教程之Resource Autoloading用法实例
2016/03/08 PHP
PHP简单获取随机数的常用方法小结
2017/06/07 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
asp 取文本框名称代码
2008/12/02 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
Vue中如何实现轮播图的示例代码
2017/07/27 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
vue动态绑定组件子父组件多表单验证功能的实现代码
2018/05/14 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
python实现多人聊天室
2020/03/31 Python
python实现KNN分类算法
2019/10/16 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python内置模块collections知识点总结
2019/12/19 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
python爬取youtube视频的示例代码
2021/03/03 Python
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
数据库基础的一些面试题
2012/02/25 面试题
农业开发项目建议书
2014/05/16 职场文书
工厂见习报告范文
2014/10/31 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL