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将向Java靠拢
Oct 09 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
深入解析php中的foreach问题
Jun 30 PHP
memcache命令启动参数中文解释
Jan 13 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
ThinkPHP中的系统常量和预定义常量集合
Jul 01 PHP
PHP采用XML-RPC构造Web Service实例教程
Jul 16 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 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
PHP新手上路(五)
2006/10/09 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
js实现界面向原生界面发消息并跳转功能
2016/11/22 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
浅谈用VSCode写python的正确姿势
2017/12/16 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
中专毕业生自荐信
2013/11/16 职场文书
销售简历自我评价
2014/01/24 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
党委班子剖析材料
2014/08/21 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书