php模式设计之观察者模式应用实例分析


Posted in PHP onSeptember 25, 2019

本文实例讲述了php模式设计之观察者模式。分享给大家供大家参考,具体如下:

这是我写的《php模式设计》的第五篇。前面的四篇在不断学习不断加深认识,到了今天再看观察者模式,觉得非常容易理解。这也许就是我们积少成多的结果吧。希望还是能够不断进步。

开篇还是从名字说起,“观察者模式”的观察者三个字信息量很大。玩过很多网络游戏的童鞋们应该知道,即便是斗地主,除了玩家,还有一个角色叫“观察者"。在我们今天他谈论的模式设计中,观察者也是如此。首先,要有一个“主题”。只有有了一个主题,观察者才能搬着小板凳儿聚在一堆。其次,观察者还必须要有自己的操作。否则你聚在一堆儿没事做也没什么意义。

从面向过程的角度来看,首先是观察者向主题注册,注册完之后,主题再通知观察者做出相应的操作,整个事情就完了。

从面向对象的角度来看,主题提供注册和通知的接口,观察者提供自身操作的接口。(这些观察者拥有一个同一个接口。)观察者利用主题的接口向主题注册,而主题利用观察者接口通知观察者。耦合度相当之低。

如何实现观察者注册?通过前面的注册者模式很容易给我们提供思路,把这些对象加到一棵注册树上就好了嘛。如何通知?这就更简单了,对注册树进行遍历,让每个对象实现其接口提供的操作。

<?php
// 主题接口
interface Subject{
  public function register(Observer $observer);
  public function notify();
}
// 观察者接口
interface Observer{
  public function watch();
}
// 主题
class Action implements Subject{
   public $_observers=array();
   public function register(Observer $observer){
     $this->_observers[]=$observer;
   }
   public function notify(){
     foreach ($this->_observers as $observer) {
       $observer->watch();
     }
   }
 }
// 观察者
class Cat implements Observer{
   public function watch(){
     echo "Cat watches TV<hr/>";
   }
 } 
 class Dog implements Observer{
   public function watch(){
     echo "Dog watches TV<hr/>";
   }
 } 
 class People implements Observer{
   public function watch(){
     echo "People watches TV<hr/>";
   }
 }
// 应用实例
$action=new Action();
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
$action->notify();

运行结果:

Cat watches TV
--------------------------------------------------------------------------------
People watches TV
--------------------------------------------------------------------------------
Dog watches TV
--------------------------------------------------------------------------------

所谓模式,更多的是一种想法,完全没必要拘泥于代码细节。观察者模式更多体现了两个独立的类利用接口完成一件本应该很复杂的事情。不利用主题类的话,我们还需要不断循环创建实例,执行操作。而现在只需要创建实例就好,执行操作的事儿只需要调用一次通知的方法就好啦。

从开始的单例模式我一步步考虑如何实现代码,到现在大部分实现代码一句带过,实际上是建立在前面不断积累的基础上。真心感觉通过不断学习设计模式能很大加深对面向对象编程的思考。当然纸上谈兵还是要不得的,最好还是投入更多的练习中去吧~~·

相关文章:《使用观察者模式处理异常信息》

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

PHP 相关文章推荐
在php MYSQL中插入当前时间
Apr 06 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 PHP
php创建类并调用的实例方法
Sep 25 #PHP
关于php开启错误提示的总结
Sep 24 #PHP
php集成开发环境详解
Sep 24 #PHP
php和nginx交互实例讲解
Sep 24 #PHP
php连接mysql数据库最简单的实现方法
Sep 24 #PHP
php和html的区别点详细总结
Sep 24 #PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 #PHP
You might like
第八节--访问方式
2006/11/16 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
动态加载js的几种方法
2006/10/23 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
Layui多选只有最后一个值的解决方法
2019/09/02 Javascript
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python实现飞机大战
2018/09/11 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
Python实现Event回调机制的方法
2019/02/13 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
师范毕业生自我鉴定
2014/01/15 职场文书
男方父母婚礼答谢词
2014/01/25 职场文书
青春演讲稿范文
2014/05/08 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2014年团队工作总结
2014/11/24 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书