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对象类型判断
Aug 27 PHP
PHP session有效期问题
Apr 26 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
Jun 21 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
Nov 27 PHP
PHP实现远程下载文件到本地
May 17 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
php简单实现批量上传图片的方法
May 09 PHP
利用php的ob缓存机制实现页面静态化方法
Jul 09 PHP
PHP实现限制IP访问及提交次数的方法详解
Jul 17 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
PHP fopen函数用法实例讲解
Feb 15 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/11/16 PHP
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
php短信接口代码
2016/05/13 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
Javascript变量的作用域和作用域链详解
2015/04/02 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
浅析python参数的知识点
2018/12/10 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
公司周年庆典标语
2014/10/07 职场文书
总经理助理岗位职责
2015/01/31 职场文书
保卫工作个人总结
2015/03/03 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
银行自荐信范文
2015/03/25 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang