php设计模式之观察者模式定义与用法经典示例

 更新时间:2019年09月19日 09:52:30   作者:巴八灵  
这篇文章主要介绍了php设计模式之观察者模式定义与用法,结合完整实例形式详细分析了php观察者模式概念、原理、定义与使用方法,代码注释包含详尽的说明,需要的朋友可以参考下

本文实例讲述了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数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php rsa加密解密使用详解

    php rsa加密解密使用详解

    这篇文章主要详细介绍了php rsa加密解密使用方法,需要的朋友可以参考下
    2015-01-01
  • PHP防止post重复提交数据的简单例子

    PHP防止post重复提交数据的简单例子

    这篇文章主要介绍了PHP防止post重复提交数据的简单例子,使用session记录一个数值的方法实现,需要的朋友可以参考下
    2014-06-06
  • 分享一个php 的异常处理程序

    分享一个php 的异常处理程序

    给大家分享一个php的异常处理程序,功能很简单当发生重大错误时,写日志并友好提示用户,用处却很大,对不对
    2014-06-06
  • Zend Framework实现多文件上传功能实例

    Zend Framework实现多文件上传功能实例

    这篇文章主要介绍了Zend Framework实现多文件上传功能的方法,较为详细的分析说明了Zend Framework实现多文件上传的具体步骤与相关实现技巧,需要的朋友可以参考下
    2016-03-03
  • 浅谈laravel-admin的sortable和orderby使用问题

    浅谈laravel-admin的sortable和orderby使用问题

    今天小编就为大家分享一篇浅谈laravel-admin的sortable和orderby使用问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • php is_executable判断给定文件名是否可执行实例

    php is_executable判断给定文件名是否可执行实例

    这篇文章主要介绍了php is_executable判断给定文件名是否可执行实例的相关资料,需要的朋友可以参考下
    2016-09-09
  • 基于Laravel实现的用户动态模块开发

    基于Laravel实现的用户动态模块开发

    这篇文章主要给大家介绍了关于基于Laravel实现的用户动态模块开发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 基于Laravel 5.2 regex验证的正确写法

    基于Laravel 5.2 regex验证的正确写法

    今天小编就为大家分享一篇基于Laravel 5.2 regex验证的正确写法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • php二维数组排序详解

    php二维数组排序详解

    二维数组排序排序在php中也提供了一个函数array_multisort就可以直接排序了,下面我来介绍除了全使用array_multisort 对数组进行排序我们还写了一些自定二维数组排序方法
    2013-11-11
  • WordPress中获取所使用的模板的页面ID的简单方法

    WordPress中获取所使用的模板的页面ID的简单方法

    这篇文章主要介绍了WordPress中获取所使用的模板的页面ID的简单方法,通过这个方法来获取页面的链接是比较方便的,需要的朋友可以参考下
    2015-12-12

最新评论