php设计模式之观察者模式定义与用法经典示例


Posted in PHP onSeptember 19, 2019

本文实例讲述了php设计模式之观察者模式定义与用法。分享给大家供大家参考,具体如下:

<?php
/**
 * @desc 利用观察者模式,实现不同用户进入显示不同的内容
 * 1.主题
 * 2.观察者接口
 * 3.观察者
 * ***/
interface Observer{
  //添加观察者对象
  public function attach($observer);
  //删除观察者对象
  public function detach($observer);
  //执行观察者需要执行的方法
  public function doIt();
}
class User implements Observer{
  public $obj = [];
  /*
  *@desc 传递的对象不在存储的obj对象中则将对象存储到obj中
  */
  public function attach($observer){
    if(!in_array($observer,$this->obj)){
      $this->obj[] = $observer;
    }
  }
  /**
   * @desc 取消观察者观察
   * **/
  public function detach($observer){
    $key = array_search($observer, $this->obj);
    if($key){
      unset($this->obj[$key]);
    }
  }
  /***
   * @desc 获取所有被观察者的对象,执行观察
   * **/
  public function doIt(){
    if(!empty($this->obj)){
      foreach ($this->obj as $v){
        $v->active();
      }
    }
  }
}
/**
 * @desc 观察者接口
 * **/
interface obsUser{
  public function active();
}
/*
 * @实现零售店用户实现方法类
 * **/
class storeUser implements obsUser{
  public function active(){
    echo "我是零售店用户\n";
  }
}
/**
 * @desc 实现经销商用户方法类
 * **/
class supplierUser implements obsUser{
  public function active(){
    echo "我是经销商用户\n";
  }
}
/*
 * 实例化观察者接口类
 * **/
$user = new User();
//添加门店用户类到观察者对象
$user->attach(new storeUser());
//添加经销商用户类到观察者对象
$user->attach(new supplierUser());
//监控观察者动作并输出结果
$user->doIt();

运行结果:

我是零售店用户
我是经销商用户

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

PHP 相关文章推荐
Mysql的常用命令
Oct 09 PHP
PHP利用header跳转失效的解决方法
Oct 24 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
php计算税后工资的方法
Jul 28 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 #PHP
php使用yield对性能提升的测试实例分析
Sep 19 #PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 #PHP
php+redis实现消息队列功能示例
Sep 19 #PHP
php文件包含的几种方式总结
Sep 19 #PHP
smarty模板的使用方法实例分析
Sep 18 #PHP
PHP MVC框架中类的自动加载机制实例分析
Sep 18 #PHP
You might like
PHP读取MySQL数据代码
2008/06/05 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
简单介绍react redux的中间件的使用
2018/04/06 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
Python中turtle作图示例
2017/11/15 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
2020/04/07 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
优秀安全员事迹材料
2014/05/11 职场文书
研究生简历自我评
2015/03/11 职场文书
2015年三万活动总结
2015/03/25 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技