PHP设计模式之----观察者模式
一、概述
1、观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
2、场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码。
观察者模式实现了低耦合,非侵入式的通知与更新机制。
3、观察者模式包含的角色:
①Subject: 目标
②Observer: 观察者
③ConcreteSubject: 具体目标
④ConcreteObserver: 具体观察者
二、代码实现
1)抽象观察目标
/** 抽象观察目标,定义观察目标要实现的方法* */ abstract class Subject {//定义数组存储观察目标protected $observers = array();//添加观察者abstract public function addObserver(Observer $observer);//删除观察者abstract public function delObserver(Observer $observer);//满足条件时通知所有观察者的操作abstract public function notify();//发起通知的条件abstract public function condition($num); }
2)观察者接口
/*** 观察者接口,定义所有观察者共同具有的操作——执行修改*/ interface Observer {function update(); }
3)具体观察目标
/** 具体观察目标*/ class ConcreteSubject extends Subject {//添加观察者public function addObserver(Observer $observer){$this->observers[] = $observer;}//移除观察者public function delObserver(Observer $observer){$key = array_search($observer, $this->observers);if ($key !== false) { //注意不要写成!=,表达式0!=flase为flaseunset($this->observers[$key]);}}//通知所有观察者去操作public function notify(){foreach ($this->observers as $key => $value) {$value->update();}}//发起通知的条件public function condition($num){if ($num > 100) {$this->notify();}} }
4)具体观察者
/** 具体观察者:观察者A* */ class ConcreteObserverA implements Observer {function update(){echo "A报告:敌军超过一百人了,快撤!<br>";}//其他函数function eat(){echo "A在吃饭";} }/** 具体观察者:观察者B* */ class ConcreteObserverB implements Observer {function update(){echo "B报告:敌军超过一百人了,快撤!<br>";}//其他函数function sleep(){echo "B在睡觉";} }
5)测试
//测试 $a = new ConcreteObserverA(); $b = new ConcreteObserverB(); $subject = new ConcreteSubject();$subject->addObserver($a); $subject->addObserver($b); $subject->condition(1000);
转载于:https://www.cnblogs.com/jxl1996/p/10185267.html
PHP设计模式之----观察者模式相关推荐
- 设计模式:观察者模式--Observer
一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...
- java 观察者模式_图解Java设计模式之观察者模式
图解Java设计模式之观察者模式 天气预报项目需求 天气预报设计方案 1 - 普通方案 观察者模式(Observer)原理 观察者模式解决天气预报需求 观察者模式在JDK应用的源码分析 天气预报项目需 ...
- 游戏服务器架构-设计模式之观察者模式和发布订阅模式真的一样吗?
前面我给大家分享了观察者模式和发布订阅模式,有人私信给我说这俩不是一样嘛,大体没什么区别,我猜测大多数认为这两者是一样的可以继续阅读这两篇文章,如果还不能解答你的问题,我相信这篇文章对比两者的关系会让 ...
- java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解
Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...
- 设计模式 C++观察者模式
无论是在现实世界中还是在软件系统中,人们常常会遇到这样一类问题,一个对象的状态改变会引发其他对象的状态改变,如十字路口的交通信号灯,红灯亮则汽车停,绿灯亮则汽车行,再如点击软件中一个按钮,则会弹出一个 ...
- 学习《图说设计模式》观察者模式
图说设计模式之观察者模式 1. 模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一 ...
- 设计模式之观察者模式——猫抓老鼠2
设计模式之观察者模式--猫抓老鼠2: 对猫抓老鼠1再次进行优化,降低代码复杂性,以及使用事件来对方法进行保护 代码优化: 将老鼠代码进行优化,将自己的方法在构造时便注册到猫里面: using Syst ...
- 设计模式之观察者模式——猫抓老鼠1
设计模式之观察者模式--猫抓老鼠: 问题描述: 通过猫抓老鼠的例子进行了解观察者模式,首先的初始代码为(有三个类): using System;/// <summary> /// 观察者设 ...
- 设计模式学习--观察者模式(Observer Pattern)
设计模式学习--观察者模式(Oberser Pattern) 2013年5月18日 天气:热! 下午15:28 设计模式学习中 学习者:小巫 什么是观察者模式? 定义了对象之间的一对多依赖,这样一 ...
- 「设计模式(二) - 观察者模式」
「设计模式(二) - 观察者模式」 一.回复TD退订 日常生活中,这种短信无处不在,各种广告,在互联网高速发展的今天,个人信息可以说是透明的.没有任何隐私可言,类似这种通知其实跟我们开发过程使用的观察 ...
最新文章
- Java大厂技术文档:Redis+Nginx+设计模式+Spring全家桶+Dubbo精选
- pythorch学习笔记
- Enums and Structs in C#(C#里的枚举和结构) (from codeproject)
- 成功驱动HD4600-Clover引导
- python音乐下载器-支持所有主流平台-python脚本源码下载
- java vector内存结构_4. Java集合知识测试
- FilterAttribute过滤器的 执行顺序
- 前后端分离 与 不分离
- C陷阱与缺陷--读书笔记3 语义“陷阱”
- GANs(生成对抗网络)初步
- n3k配置vpc是否还需要配置hsrp_HSRP
- 升45武器并不一定大黑铁 自然+13的飞魂 (传奇3G)
- 计算机学院研发------考核之界面
- 网易严选App感受Weex开发
- TOEFL wordlist 35
- GCC学习(动态库与静态库.a与.so)
- 勇敢码农,不怕困难!阿里内部不外传秘籍50万字Java面试手册奉上
- 数字SOC设计之低功耗设计入门(一)——低功耗设计目的与功耗的类型
- 关于UNITY3d摄像机跟随人物转动的脚本
- HC-SR501红外热释电传感器
热门文章
- [Java] 蓝桥杯ADV-175 算法提高 三个整数的排序
- 曲线拟合最小二乘法对数c语言实现,数值计算_第6章曲线拟合的最小二乘法
- 克服跨洋网络延迟,使用Docker Hub Mirror加速Docker官方镜像下载
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数
- Nginx 安装与使用
- window7 已经分好区的硬盘如何再次分区?
- 透彻理解Java并发的等待队列——Condition
- 虚拟无线接入网:行业的演进方向
- Ubuntu 16.04安装Guake Terminal终端(使用一键唤醒功能)
- oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍