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 相关文章推荐
PHP数据库操作面向对象的优点
Oct 09 PHP
用libTemplate实现静态网页的生成
Oct 09 PHP
一段防盗连的PHP代码
Dec 06 PHP
php中函数的形参与实参的问题说明
Sep 01 PHP
php中去除所有js,html,css代码
Oct 12 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
PHP生成二维码的两个方法和实例
Jul 01 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
降低PHP Redis内存占用
Mar 23 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
Python重新引入被覆盖的自带function
2014/07/16 Python
详解Python发送邮件实例
2016/01/10 Python
Python 字符串大小写转换的简单实例
2017/01/21 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
详解【python】str与json类型转换
2019/04/29 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
应届生.NET方向面试题
2015/05/23 面试题
幼儿园新年寄语
2014/04/03 职场文书
亲子活动总结
2014/04/26 职场文书
应届大学生自荐书
2014/06/17 职场文书
党课培训心得体会
2014/09/02 职场文书
地球一小时活动总结
2015/02/27 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
Go语言基础map用法及示例详解
2021/11/17 Golang
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python