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 相关文章推荐
discuz安全提问算法
Jun 06 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
抓取YAHOO股票报价的类
May 15 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
php var_export与var_dump 输出的不同
Aug 09 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
PHP微信公众号自动发送红包API
Jun 01 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
深入php数据采集的详解
2013/06/02 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
有关Python的22个编程技巧
2018/08/29 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
利用python爬取有道词典的方法
2020/12/08 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
教师推荐信范文
2013/11/24 职场文书
给医务人员表扬信
2014/01/12 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
初中学校军训方案
2014/05/09 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
安全生产工作汇报
2014/10/28 职场文书
公司搬迁通知
2015/04/20 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
新手初学Java List 接口
2021/07/07 Java/Android