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中使用Oracle数据库(2)
Oct 09 PHP
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
Jun 15 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
php获取远程文件的内容和大小
Nov 03 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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 中的类
2006/10/09 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
详解vue v-model
2020/08/31 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
js实现电灯开关效果
2021/01/19 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python PyTorch参数初始化和Finetune
2018/02/11 Python
opencv python 2D直方图的示例代码
2018/07/20 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
Python新手学习函数默认参数设置
2020/06/03 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
个人自我鉴定写法
2013/11/30 职场文书
母校寄语大全
2014/04/10 职场文书
个人工作主要事迹
2014/05/08 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
高二数学教学反思
2016/02/18 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
MongoDB支持的索引类型
2022/04/11 MongoDB