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 - Html Transfer Code
Oct 09 PHP
php使用filter过滤器验证邮箱 ipv6地址 url验证
Dec 25 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
PHP生成自定义长度随机字符串的函数分享
May 04 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
smarty内置函数capture用法分析
Jan 22 PHP
php按字符无乱码截取中文的方法
Mar 27 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 PHP
一文看懂PHP进程管理器php-fpm
Jun 01 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
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
js常用代码段整理
2011/11/30 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
VUE 单页面使用 echart 窗口变化时的用法
2020/07/30 Javascript
python算法学习之基数排序实例
2013/12/18 Python
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
PyQt5 多窗口连接实例
2019/06/19 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
WebSphere面试题:在WebSphere里面如何部署一个应用
2015/08/02 面试题
《天安门广场》教学反思
2014/04/23 职场文书
优秀毕业生求职信
2014/06/05 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
Flask response响应的具体使用
2021/07/15 Python