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 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
Dec 17 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
php TP5框架生成二维码链接
Apr 01 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP中把stdClass Object转array的几个方法
2014/05/08 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
深入浅析ES6 Class 中的 super 关键字
2017/10/20 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
浅析vue-router原理
2018/10/19 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
python3+PyQt5实现拖放功能
2018/04/24 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
解析Python3中的Import
2019/10/13 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
2020/06/02 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
公司财务自我评价分享
2013/12/17 职场文书
爱我中华教学反思
2014/04/28 职场文书
企业党员个人自我评价
2014/09/20 职场文书
给朋友的道歉短信
2015/05/12 职场文书
房屋所有权证明
2015/06/19 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers