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 相关文章推荐
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
PHP 数组教程 定义数组
Oct 23 PHP
php获取淘宝分类id示例
Jan 16 PHP
php异步多线程swoole用法实例
Nov 14 PHP
php静态文件生成类实例分析
Jan 03 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 PHP
laravel框架与其他框架的详细对比
Oct 23 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 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 基本语法格式
2009/12/15 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
JavaScript中数组添加值和访问值常见问题
2016/02/06 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
微信小程序实现发微博功能的示例代码
2020/06/24 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
Python的Urllib库的基本使用教程
2015/04/30 Python
python表格存取的方法
2018/03/07 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
环境工程大学生自荐信
2013/10/21 职场文书
电子商务专业个人的自我评价
2013/11/19 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
主要负责人任命书
2014/06/06 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
繁星春水读书笔记
2015/06/30 职场文书
小学班主任工作随笔
2015/08/15 职场文书