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 smarty的预保留变量总结
Dec 04 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
php增删改查示例自己写的demo
Sep 04 PHP
php跨域cookie共享使用方法
Feb 20 PHP
zf框架的registry(注册表)使用示例
Mar 13 PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
python之生产者消费者模型实现详解
2019/07/27 Python
如何通过python实现人脸识别验证
2020/01/17 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
创业计划书六个要素
2013/12/26 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
运动会200米广播稿
2015/08/19 职场文书
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
2021/05/12 Python
使用scrapy实现增量式爬取方式
2022/06/21 Python