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 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHPMyAdmin 快速配置方法
May 11 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
php隐藏实际地址的文件下载方法
Apr 18 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php备份数据库类分享
2015/04/14 PHP
浅谈php+phpStorm+xdebug配置方法
2015/09/17 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
php简单中奖算法(实例)
2017/08/15 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
JS实现IE状态栏文字缩放效果代码
2015/10/24 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
vue 多入口文件搭建 vue多页面搭建的实例讲解
2018/03/12 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
Python对列表排序的方法实例分析
2015/05/16 Python
Python实现处理管道的方法
2015/06/04 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
毕业生文员求职信
2013/11/03 职场文书
办公室主任岗位职责
2015/01/31 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
大学生自荐书范文
2015/03/05 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL