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中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php实现图片等比例缩放代码
Jul 23 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 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中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
javascript实现画板功能
2020/04/12 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Sanic框架配置操作分析
2018/07/17 Python
python中的常量和变量代码详解
2018/07/25 Python
python实现贪吃蛇小游戏
2020/03/21 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
美国电视购物HSN官网:HSN
2016/09/07 全球购物
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
总经理任命书范本
2014/06/05 职场文书
党员志愿者活动总结
2014/06/26 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
教师考核评语大全
2014/12/31 职场文书