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 相关文章推荐
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
Mar 15 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
php基于curl扩展制作跨平台的restfule 接口
May 11 PHP
PHP中的一些常用函数收集
May 26 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
必须收藏的php实用代码片段
Feb 02 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
详解PHP变量传值赋值和引用赋值变量销毁
Mar 23 PHP
Laravel配合jwt使用的方法实例
Oct 25 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
对盗链说再见...
2006/10/09 PHP
认识并使用PHP超级全局变量
2010/01/26 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
微信小程序使用Socket的实例
2017/09/19 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
python使用PyGame模块播放声音的方法
2015/05/20 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
python 多线程串行和并行的实例
2019/02/22 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
python中常见错误及解决方法
2020/06/21 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
条幅标语大全
2014/06/20 职场文书
2015试用期转正工作总结
2014/12/12 职场文书
个人德育工作总结
2015/03/05 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
Pygame Draw绘图函数的具体使用
2021/11/17 Python
python turtle绘图命令及案例
2021/11/23 Python
Win11 Dev 预览版25174.1000发布 (附更新修复内容汇总)
2022/08/05 数码科技