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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
php实现的生成排列算法示例
Jul 25 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 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
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
php实现学生管理系统
2020/03/21 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
微信小程序错误this.setData报错及解决过程
2019/09/18 Javascript
vue实现购物车案例
2020/05/30 Javascript
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
python实现的一个p2p文件传输实例
2014/06/04 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
简述Python中的进程、线程、协程
2016/03/18 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
Python换行与不换行的输出实例
2020/02/19 Python
ddl,dml和dcl的含义
2016/05/08 面试题
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
18岁生日感言
2014/01/12 职场文书
2014年环保局工作总结
2014/12/11 职场文书
合作意向协议书
2015/01/29 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
拔河比赛队名及霸气口号
2015/12/24 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
python 详解turtle画爱心代码
2022/02/15 Python