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获取某个目录大小的代码
Sep 10 PHP
PHP安全防范技巧分享
Nov 03 PHP
PHP自动生成后台导航网址的最佳方法
Aug 27 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
php数组合并与拆分实例分析
Jun 12 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
PHP实现的分解质因数操作示例
Aug 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
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
微信支付开发交易通知实例
2016/07/12 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
微信小程序实现点击页面出现文字
2020/09/21 Javascript
Python去除字符串两端空格的方法
2015/05/21 Python
Python正则简单实例分析
2017/03/21 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python读写Excel表格的方法
2021/03/02 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
linux系统都有哪些运行级别
2012/04/15 面试题
乡镇创先争优活动总结
2014/08/28 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
英文投诉信格式
2015/07/03 职场文书
2016特色励志班级口号
2015/12/24 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python