首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP设计模式|观察者模式

第二天让我们加入统计登陆次数,然后在后面加代码 第三天让我们判断登陆地区,又在后面加代码 第四天让我们在用户登陆后推送活动,再再后面加代码 第N天,这个接口已经杂乱到没人想维护了 我们需要让项目保持高内聚低耦合,就可以用到观察者模式...(也不是非要,看需求) 概念 观察者,观察者,首先要有个被人观察的角色,这是唯一的,然后会有无数个观察者去看她,可以说是一群人在围观一个人,既然有无数个观众,那总得有个东西记录有哪些观察者,那就应该有一个类似于数组一样来储存所有观察者...; } Subject就是被观察者,Observer就是观众,也就是观察者 被观察者 // 被观察者 class Action implements Subject{ public $_observers...,执行它的register()方法,把每个观察者都放入容器数组,最后执行notify()方法,通知所有观察者执行自己的方法。...PHP原生自带的观察者模式 PHP有自带的观察者模式 splsubject接口 - 被观察者 Observer接口 - 观察者 SplObjectStorage对象 - 容器 首先我们有一个用户登录类

40810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP设计模式之观察者模式

    PHP设计模式之观察者模式 观察者,貌似在很多科幻作品中都会有这个角色的出现。比如我很喜欢的一部美剧《危机边缘》,在这个剧集中,观察者不停的穿越时空记录着各种各样的人或事。...但是,设计模式中的观察者可不只是站在边上看哦,这里的观察者是针对主体发生的状态改变来做出对应的动作。...其实,这里就引出了另一个非常出名的模式订阅发布模式。这个模式可以说是观察者的升级模式,这个系列的文章不会细讲,但是大家可以去看看Laravel中的发布订阅及事件监听方面的内容。 订单售出类图 ?...的SPL扩展中已经为我们准备好了一套观察者接口,大家可以试试哦,使用原生支持的观察者模式能省不少事儿呢!...SPL扩展实现观察者模式-完整源码:https://github.com/zhangyue0503/designpatterns-php/blob/master/06.observer/source/spl_observer.php

    55420

    php设计模式(十九):观察者模式(Observer)

    观察者模式 观察者模式又称为:事件订阅者、监听者、Event-Subscriber、Listener、Observer。...观察者是一种行为设计模式,允许定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。 问题 观察者模式是一种发布和订阅模式,我们平常去抢购茅台、Aj、…多少会用到观察者模式。...PHP_EOL; } } PHP Copy 客户端使用 $shop = new Shop(); $zs = new Customer('张三'); $ls = new Customer('李四'...PHP_EOL; $shop->detach($ls); $shop->notify(); PHP Copy 输出 我是张三,我马上来门店产看新产品 我是李四,我马上来门店产看新产品 我是王五,我马上来门店产看新产品...产品不好,李四想退出订阅 我是张三,我马上来门店产看新产品 我是王五,我马上来门店产看新产品 php 官方已经提供了,请参考:SplObserver 和 SplSubject UML 优缺点

    14320

    php设计模式(十九):观察者模式(Observer)

    观察者模式 观察者模式又称为:事件订阅者、监听者、Event-Subscriber、Listener、Observer。...观察者是一种行为设计模式,允许定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。 问题 观察者模式是一种发布和订阅模式,我们平常去抢购茅台、Aj、…多少会用到观察者模式。...PHP_EOL; } } 客户端使用 $shop = new Shop(); $zs = new Customer('张三'); $ls = new Customer('李四'); $ww =...PHP_EOL; $shop->detach($ls); $shop->notify(); 输出 我是张三,我马上来门店产看新产品 我是李四,我马上来门店产看新产品 我是王五,我马上来门店产看新产品...产品不好,李四想退出订阅 我是张三,我马上来门店产看新产品 我是王五,我马上来门店产看新产品 php 官方已经提供了,请参考:SplObserver 和 SplSubject UML 优缺点 优点

    41130

    PHP 设计模式之观察者模式 转

    很多时候,我看设计模式的时候,有些设计模式只是吻合我的代码习惯。但是你硬去套它,那么反而适得其反。...观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新! 设计原则 在观察者模式中,会改变的是主题的状态以及观察者的数目。...观察者模式利用“组合”将许多观察者组合进主题中。对象(观察者——主题)之间的这种关系不是通过继承产生的,而是在运行时利用组合的方式产生的。 ——多用组合,少用继承! 代码 php /**  * 观察者模式  * @author: Mac  * @date: 2012/02/22  */     class Paper{ /* 主题    */     private $_...这降低了主题对象和观察者对象的耦合度。 好的设计模式不会直接进入你的代码中,而是进入你的大脑中。

    31610

    PHP面向对象的设计模式-观察者模式

    一、概述观察者模式是一种行为设计模式,它定义了对象之间的一种一对多的依赖关系,当一个对象状态发生改变时,所有依赖它的对象都将得到通知并自动更新。...这种模式也叫做发布-订阅模式,它能够解决对象之间的耦合关系。观察者模式有三个角色:Subject(主题)、Observer(观察者)和ConcreteObserver(具体观察者)。...观察者模式的优点是可以实现松耦合,即Subject和Observer之间的耦合度很低,它们可以独立地改变而不会影响到对方。...此外,观察者模式还支持广播通信,即Subject可以同时通知多个Observer。二、示例下面是一个使用观察者模式的示例。假设有一个天气主题,它会随着天气的变化通知所有的观察者。...使用观察者模式的主要步骤如下:定义Subject接口,其中包含注册、移除和通知观察者的方法。定义Observer接口,其中包含接收通知的方法。

    32971

    观察者模式

    观察者模式 观察者模式Observer Pattern是一种对象行为型模式,当定义的对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新,观察者模式又叫做发布...描述 观察者模式建立了一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。...优点 观察者模式可以实现表示层和数据逻辑层的分离,并定义了稳定的消息更新传递机制,抽象了更新接口,使得可以有各种各样不同的表示层作为具体观察者角色。...观察者模式在观察目标和观察者之间建立一个抽象的耦合。 观察者模式支持广播通信。 观察者模式符合开闭原则的要求。...观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 适用环境 一个抽象模型有两个方面,其中一个方面依赖于另一个方面。

    45300

    观察者模式

    大家好,我是老田,今天我给大家分享设计模式中的观察者模式。用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式。...看完这个后,我忽然想起一个设计模式:观察者模式。 老田是个喜欢学习春秋战国时期的历史和人文故事,有通道之人,可以私聊! 为什么会想到哦观察者模式呢?请听老田慢慢道来。 本文目录: ?...7个问题 快速掌握 模板方法 模式 五分钟 掌握 原型模式 泡图书馆,我想到了 享元模式 言归正传,我们先来看看观察者模式的定义。...下面我们来看看一个写生活中的观察者模式的场景。 观察者模式的应用场景 观察者模式在现实生活中的应用也非常广泛,比如:各种APP上的各种消息提示、学校铃声、公众号文章提示、各大网站消息提示等。...总结 从本文内容,我们很容易看出,观察者模式其实是围绕了解耦的思想来写的,观察者模式作为行为型设计模式,主要也是为了不同的业务行为的代码解耦。

    70820

    观察者模式

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。...3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 使用场景: 1、有多个子类共有的方法,且逻辑相同。...注意事项: 1、JAVA 中已经有了对观察者模式的支持类。 2、避免循环引用。 3、如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。...实现 观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。...ObserverPatternDemo,我们的演示类使用 Subject 和实体类对象来演示观察者模式。 步骤 1 创建 Subject 类。

    34710

    观察者模式

    概述   有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...观察者就是解决这类的耦合关系的。 ---- 观察者模式 观察者模式适合解决多种对象跟踪一个对象数据变化的程序结构问题, 有一个称作“主题”的对象和若干个称作“观察者的对象”。...因此设计观察者模式的只有两种角色:主题和观察者 从观察者模式中我们可以从以下递推中得出一些重要的结论 主题要知道有哪些观察者对其进行监测,因此主题类中一定有一个集合类成员变量,包含了观察这的对象集合。...---- JDK中的观察者和设计者模式 由于观察者模式中主题类功能以及观察者接口定义内容的稳定性,JDK的java.utils包提供了系统的主题类Observable以及观察者接口Observer....当然了我们之前提到的那些自定义实现的设计者模式也并非无效的,这些知识是从底层的接口讲起直至最高层,对于理解观察者模式的本质是有必要的。

    74740

    观察者模式

    2019年3月25日11:01:22 观察者模式( observer pattern) 写在前面的话 正值金三银四跳槽季,设计模式也是常问的问题之一。...本人在3月2日的一次面试的二面中,问到设计模式,问到了观察者模式,而且要求写了伪代码。...观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。...————《设计模式:可复用面向对象软件的基础》 观察者模式是一种对象行为型模式。 使用场景 当一个对象的改变(名词)需要改变(动词)其他对象的时候。...观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 总结 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

    44210

    观察者模式

    1.定义 观察者模式是一种行为类模式,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。...2.实例(订阅杂志) /** * 抽象观察者类,为所有具体观察者定义一个接口,在得到通知时更新自己 */ public interface Observer { /** * 有更新就推送消息...*/ public void update(String message); } /** * 具体的观察者类,也就是订阅者 */ public class User implements...requestLayout();//************************重新布局,ViewGroup } } 4.总结 1.优点 (1)观察者和被观察者之间是抽象耦合...2.缺点 在应用观察者模式时需要考虑一下开发效率和运行效率的问题,程序中包括一个被观察者、多个观察者,开发、调试等内容会比较复杂,而且在Java中消息的通知一般是顺序执行,那么一个观察者卡顿,会影响整体的执行效率

    57530

    观察者模式

    抽象的观察者类. 具体的观察者类. 具体场景及代码演示 你现在是一枚老韭菜!还是会写代码的韭菜!(简单易割还长得快)....这样不是很符合开闭原则,因此使用观察者模式将他重构一下. 由于jdk在util包里有对抽象目标和抽象观察者的定义,这里不做重复的定义,学习一下这两个接口....,删除观察者,通知观察者.存储观察者使用的Vector.保证对观察者的添加及删除操作线程安全.对Vector想了解的朋友可以移步Vector源码阅读....(观察者),之后股票上涨(被观察者变化),看一下结果,观察者是否收到消息并更新自身信息....总结 在对象观察一对多的情况下,观察者模式成功的将我们的系统解耦,并提高了系统的可扩展性,但是有没有问题呢? 有,如果这里的终端不只是个人的,而是一群人的,即:观察者过多,一个个通知将会很慢.

    52520

    观察者模式

    前言 观察者模式还算一个比较好玩的设计模式,其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。可以想象成消息中间件在系统中的作用。...大家学过设计模式后要切记不是设计模式用的越多系统越好,不适合的不要强加过去,本来很简单的逻辑那么咱们就不要大费周折,设计模式的其中一点就是解决代码复用性,如果违背了就不好了。...观察者是一种面向接口编程 在观察者模式结构图中包含如下几个角色 ● Subject(目标):目标又称为主题,它是指被观察的对象。...server.addObserver(userB); server.addObserver(userC); server.setInformation("PHP...在以下情况下可以考虑使用观察者模式: (1) 一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变和复用。

    35520

    观察者模式

    观察者模式需要如下几个对象构建出整个框架: 1抽象主题角色:提供了一个用于保存观察者对象的聚集类和增加删除观察者对象的方法,以及通知所有观察者的抽象方法 2具体主题:具体目标类,实现抽象主题的类...3抽象观察者:是一个抽象类接口,包含一个更新自己的抽象方法,更改通知时随时被调用 4具体观察者 具体例子 import java.util.ArrayList; import java.util.Iterator..."; peopleDaily.notifyObserver(); } } // 抽象主题 abstract class WeChatSubscribe { // 定义观察者集合...AbstractOB> observers = new ArrayList(); public String sendMessage = ""; // 添加观察者方法...public void add(AbstractOB observer) { observers.add(observer); } // 移出观察者方法

    38320

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券