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 相关文章推荐
实现树状结构的两种方法
Oct 09 PHP
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
PHP print类函数使用总结
Jun 25 PHP
解析php5配置使用pdo
Jul 03 PHP
如何利用PHP执行.SQL文件
Jul 05 PHP
php查看当前Session的ID实例
Mar 16 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
php微信开发之带参数二维码的使用
Aug 03 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
PDO::prepare讲解
Jan 29 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 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水印
2007/03/16 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
配置php网页显示各种语法错误
2013/09/23 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
js宝典学习笔记(上)
2007/01/10 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
2015/07/31 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
python的常见命令注入威胁
2013/02/18 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
正规的求职信范文分享
2013/12/11 职场文书
顶碗少年教学反思
2014/02/21 职场文书
投标担保书范文
2014/04/02 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书