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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
常用的PHP数据库操作方法(MYSQL版)
Jun 08 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
php pdo操作数据库示例
Mar 10 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
PHP实现随机发扑克牌
Apr 22 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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 register_shutdown_function()函数的使用示例
2015/06/23 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
广告显示判断
2006/08/31 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
JS字符串处理实例代码
2013/08/05 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
js文字横向滚动特效
2015/11/11 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
通过V8源码看一个关于JS数组排序的诡异问题
2017/08/14 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
python使用folium库绘制地图点击框
2018/09/21 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
市政施工员自我鉴定
2014/01/15 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
学校教研活动总结
2014/07/02 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
综治维稳工作汇报
2014/10/27 职场文书
十七岁的单车观后感
2015/06/12 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL