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
php生成WAP页面
Oct 09 PHP
php循环输出数据库内容的代码
May 24 PHP
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
ini_set的用法介绍
Jan 07 PHP
PHP访问Google Search API的方法
Mar 05 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
关于laravel模板中生成URL的几种模式总结
Oct 18 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php计算函数执行时间的方法
2015/03/20 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
node文件批量重命名的方法示例
2017/10/23 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
构建Python包的五个简单准则简介
2015/06/15 Python
Python中property属性实例解析
2018/02/10 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python3.5运算符操作实例详解
2019/04/25 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Python shutil模块用法实例分析
2019/10/02 Python
python dataframe NaN处理方式
2019/12/26 Python
Python pip配置国内源的方法
2020/02/14 Python
如何基于Python按行合并两个txt
2020/11/03 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
竞选班干部演讲稿
2014/04/24 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
行政处罚听证告知书
2015/07/01 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
MySql数据库 查询时间序列间隔
2022/05/11 MySQL