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

观察者设计模式 - 具体主题和观察者

观察者设计模式是一种行为型设计模式,它用于在对象之间建立一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够得到通知并自动更新。

具体主题(Subject)是被观察的对象,它维护了一个观察者列表,并提供了用于添加、删除和通知观察者的方法。具体主题通常会包含一个状态,当状态发生改变时,会通知所有观察者。

观察者(Observer)是依赖于具体主题的对象,它定义了一个更新方法,用于接收具体主题的通知并进行相应的处理。观察者可以根据需要自行决定是否订阅具体主题的通知。

观察者设计模式的优势包括:

  1. 解耦性:具体主题和观察者之间通过接口进行通信,使得它们可以独立演化,互不影响。
  2. 可扩展性:可以方便地增加新的观察者,而无需修改具体主题的代码。
  3. 灵活性:观察者可以根据需要自由订阅和取消订阅具体主题的通知。
  4. 实时性:观察者能够及时接收到具体主题的状态变化通知,进行相应的处理。

观察者设计模式在实际应用中有广泛的应用场景,例如:

  1. GUI开发:在图形用户界面中,可以使用观察者模式来实现组件之间的消息传递和状态更新。
  2. 订阅发布系统:观察者模式可以用于实现订阅发布系统,让用户能够订阅感兴趣的主题并接收相关的消息。
  3. 股票市场:股票市场中的投资者可以作为观察者,股票价格的变化可以作为具体主题,投资者可以根据股票价格的变化做出相应的决策。

腾讯云提供了一些相关的产品,可以用于支持观察者设计模式的实现,例如:

  1. 云函数(Serverless):腾讯云云函数可以作为具体主题,当函数执行完成时,可以触发通知给所有观察者。
  2. 消息队列(CMQ):腾讯云消息队列可以作为具体主题,当消息发送到队列时,可以通知所有观察者进行相应的处理。

更多关于腾讯云相关产品的介绍和详细信息,可以参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

设计模式-观察者模式

模式定义了一个一对多的关系,一个被观察对象与一群观察对象存在依赖关系,一旦这个被观察对象有什么风吹草动,其他的观察者就都能收到通知。其实本质是被观察对象通知所有观察者对象。...抽象主题 Subject:提供添加减少观察者方法通知观察者方法; 具体主题 ConcreteSubject:对抽象主题的实现,包含一个观察者的集合[这里是接口哦,我们是针对接口编程的],用以操作与观察者之间的互动...; 抽象观察者 Observer:提供被主题调用的方法,一旦主题变动,就调用这个方法; 具体观察者 ConcreteObserver:对抽象观察者的抽象调用方法进行实现。...,大抵上可以完成任务了 public interface Observer { public void update(); } 抽象观察者,这里简化,只有一个公开方法被主题调用 接下来把具体主题构造出来..."+this.state); notifyObservers(); } } 具体主题就实现了一个方法,顿时轻松,观察者上面一样,来看下客户端怎么使用 public class

48730

设计模式 ——— 观察者模式

观察者模式结构图.png Subject(目标) 目标知道它的观察者。可以有任意多个观察者观察同一个目标。 提供注册删除观察者对象的接口。...优缺点 优点 ① 目标观察者的抽象耦合:一个目标所知道的仅仅是它又一系列观察者,每个都符合抽象的Observer类的简单接口。目标不知道任何一个观察者属于哪一个具体的类。...Java API 内置观察者模式.png 我们可以通过继承Observable类实现Observer接口来分别实现主题观察者。...,好让观察者知道是哪个主题通知它的。...而这么做的好处在于,让你在更新观察者时有更多的弹性,你可以更适当地通知观察者。 ? 参考 《Head First 设计模式》 《设计模式:可复用面向对象软件的基础》 《研磨设计模式

85210

设计模式~观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态上发生变化时,会通知所有观察者对象,使得它们能够自动更新自己。 观察者模式的结构 ?...抽象主题提供一个接口,可以增加删除观察者对象,主题角色又叫做抽象被观察者角色(Observable),一般用一个抽象类或者一个接口实现。...具体主题角色(ConcreteSubject): 将有关状态存入具体观察者对象,在具体主题的内部状态改变时,给所有登记过的观察者发出通知。...具体观察者角色(ConcreteObserver): 存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。...在类图中,从具体主题角色指向抽象观察者角色的合成关系,代表具体主题对象可以含有任意多个对抽象观察者对象的引用。

35630

设计模式-观察者模式

观察者模式 1、观察者模式简介 观察者(Observer)模式指在被观察者的状态发生变化时,系统基于事件驱动理论将其状态通知到订阅模式观察者对象中,以完成状态的修改事件的传播。...观察者模式是一种对象行为型模式观察者观察者之间的关系属于抽象耦合关系,主要优点是在观察者与被观察者之间建立了一套事件出发机制,以降低二者之间的耦合度。...观察者模式的主要角色如下: 抽象主题(Subject):持有订阅了该主题观察者对象的集合,同时提供了增加、删除观察者对象的方法主题状态发生变化后的通知方法。...具体主题(Concrete Subject):实现了抽象主题的通知方法,在主题的内部状态发生变化时,调用该方法通知订阅了主题状态的观察者对象。...具体观察者(Concrete Observer):抽象观察者的实现类,在收到主题状态发生变化的信息后执行具体的出发机制。

14120

设计模式-观察者模式

定义 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新...抽象主题提供了一个接口,可以增加删除观察者对象;Observer类是抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己;ConcreteSubject类是具体主题,将有关状态存入具体观察者对象...,在具体主题内部状态改变时,给所有登记过的观察者发出通知;ConcreteObserver是具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协同。...public interface Observer { //更新 public void update(); } 具体主题 继承Subject类,在这里实现具体业务,在具体项目中,该类会有很多变种...观察者观察者是抽象耦合的 建立了一套触发机制 观察者模式的缺点 如果一个被观察者对象有很多的直接间接的观察者的话,将所有的观察者都通知到会花费很多时间 如果观察者观察目标间有循环依赖,可能导致系统崩溃

14950

设计模式----观察者模式

观察者模式: 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 观察者模式的结构: 主要有四部分:主题接口、观察者接口、具体主题具体观察者。...观察者接口:所有潜在的观察者必须实现此接口,这个接口只有update()一个方法,当主题状态改变时它被调用。 具体主题具体主题实现主题接口。 具体观察者具体观察者可以是实现了观察者接口的任意类。...观察者必须向具体主题注册,以便接受更新。 举个例子: 气象观测站项目。WeatherData对象获取观测数据,另外有三个布告板类,分别显示目前状况、气象统计天气预报。...先看主题接口代码观察者接口代码,只是简单的声明三个方法: //主题接口 public interface Subject{ //注册观察者方法,要注册的观察者作为参数 public void...java内置支持“拉”“推”两种观察者模式,需要引入两个包: import java.util.Observable; import java.util.Observer;

60500

设计模式 | 观察者模式

说明 这个设计模式很常用、重要, 所以要好好看。这是一个非常经典的设计模式, 解决了不少问题, 在实际项目中应用比较广泛。...先简单说一下设计模式的定义: 一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作。观察者模式实现了低耦合,非侵入式的通知与更新机制。 举个?...这个设计模式之后变种了一个发布/订阅的模式, 这个设计模式也是比较容易理解, 大家可以去了解下。 那观察者模式在什么情况下使用呢?...观察者可以实现消息的广播,一个消息可以触发多个事件,这是 观察者模式非常重要的功能。...我们的观察者模式也是一样的问题,一个观察者可以有双 重身份,即使观察者,也是被观察者,这没什么问题呀,但是链一旦建立,这个逻辑就比较复杂,可维护性非常差,根据经验建议,在一个观察者模式中最多出现一个对象既是观察者也是被观察者

42020

设计模式——观察者模式

在软件设计中也是一样,例如:MVC 模式中的模型与视图的关系。此类场景使用观察者模式来实现的话,就非常方便。...二、观察者模式的结构与类图 ---- 实现观察者模式时,需要注意具体目标对象具体观察者对象之间不能直接调用,否则会使两者之间紧密耦合起来,这违反了面向对象的设计原则。...观察者模式主要包含以下角色:【1】抽象主题角色(Subject):也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。...【2】具体主题角色(Concrete Subject):也叫具体目标类,它实现了抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。...三、观察者模式案例分析 ---- 【1】抽象主题角色(Subject):包含对观察者对象的增加、删除通知等方法的抽象接口。

22120

设计模式-观察者模式

背景 自从有了微信公众号后,关注了某个公众号基本每天都有新的文章推送的通知,我们可以很方便的进行查阅,了解最新的资讯,什么老美放大水、什么中东又暴乱了,第一时间就知道了,而这里的关注通知的行为其实有点类似观察者模式观察者...用户关注公众号,公众号(被观察者)更新文章通知所有用户(观察者)。 观察者模式是什么? 观察者模式(Observer Pattern)它属于行为模式。...角色: ObServer(观察者):负责监听消息,当收到被观察者的状态改变时通知自己,做出更新动作。 ConcreteObServer(具体观察者):具体实现观察者的实现。...Subject(被观察者):负责将所有的观察者保存在一个集合里,并且支持动态增减。 ConcreteSubject(具体观察者):具体的被观察者的实现,当内部发生改变时,通知所有的观察者。...开闭原则:支持对新的观察者观察者的增加。 低耦合:观察者、被观察者双方都没有直接的联系,而且通过消息的通知进行。

35820

设计模式-观察者模式

01 前言 观察者模式是松偶合的。改变被观察者观察者中的一方,另一方不会受到影像。 JDK中也有自带的观察者模式。但是被观察者是一个类而不是接口,限制了它的复用能力。...观察者模式中有被观察者(Observerable)观察者(Observer).观察者模式定义了对象之间的一对多的依赖关系,这样,当"一"的一方状态发生变化时,它所依赖的"多"的一方都会收到通知并且自动更新...通过结构图可以看到,该模式包含四个角色: 抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。...抽象主题提供一个接口,可以增加删除观察者角色。一般用一个抽象类接口来实现。 抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。...具体观察者角色:也就是一个具体主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知。 具体观察者角色:实现抽象观察者角色所需要的更新接口,一边使本身的状态与制图的状态相协调。 ?

33430

🔥【设计模式观察者模式

1.0版本(双向耦合) 我们描述一个工作做的实际场景来说一说观察者模式,我们在公司的时候会加入很多的群,微信群、QQ群、企业微信群、钉钉群等,他们都有一些公共的功能,第一个功能是可以邀请员工加入,第二个功能是发布群公告来通知群成员...我们员工工作群之间就形成了符合观察者模式的特点,多位员工关注(订阅)着群公告,工作群在有重要事件的时候进行信息的发布。...\n${this.swg.getNotice()}` ); } } 我们通过面向对象的编程思想构造出了WeCharGroup、Programmer两个对象,它们的功能属性在上面的UML类图代码中都明确的体现了...观察者模式也称为发布-订阅模式。 1. 观察者模式定义一对多的依赖关系,让多个观察者同时关注一个主题对象,并在主题对象发生变化后通知观察者尽心更新。...注:最近翻了翻好早前买的《大话设计模式》,感觉还有很有意思呀。

22740

设计模式-观察者模式

模式定义 定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。...设计原则 为交互对象之间的松耦合设计而努力:当两个对象之间松耦合,它们依然可以交互,但是不清楚彼此的细节。由于松耦合的两个对象之间互相依赖程度很低,因此系统具有弹性,能够应对变化。...对Subject接口的三个方法进行了具体实现,同时有一个List集合,用以保存注册的观察者,等需要通知观察者时,遍历该集合。...改变主题观察者中的一方,另一方不会受到影响。 JDK中也有自带的观察者模式,但是被观察者是一个类而不是接口,限制了它的使用复用能力。...JDK内置观察者模式java.util.Observer接口, java.util.Observable类。 在JavaBeanSwing中也有观察者模式设计思想。

81630

设计模式-观察者模式

观察者模式 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。...这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。 1.优点 降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。 目标与观察者之间建立了一套触发机制。...} 3.3 具体的目标 public class ConcreteSubject extends Subject{ //唤醒观察者 public void notifyObserver...for(Object obs:observers) { ((Observer)obs).response(); } } } 3.4 具体观察者A public...A作出响应"); } } 3.5 具体观察者B public class ConcreteObserverB implements Observer { @Override

36020

观察者模式(设计模式)

概述 观察者模式其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。可以想象成消息中间件在系统中的作用。SpringBoot启动就是使用了观察者模式。...网上这个概念说的太宽泛了,请看图: [图1]  还有一个图,也可以帮助大家理解 [图2] 首先,观察者是一种面向接口编程,包含的角色有: ● Subject(目标):目标又称为主题,它是指被观察的对象。...在目标中定义了一个观察者集合,一个观察目标可以接受任意数量的观察者来观察,它提供一系列方法来增加删除观察者对象,同时它定义了通知方法notify()。目标类可以是接口,也可以是抽象类或具体类。 ...● ConcreteObserver(具体观察者):在具体观察者中维护一个指向具体目标对象的引用,它存储具体观察者的有关状态,这些状态需要和具体目标的状态保持一致;它实现了在抽象观察者Observer中定义的...; } } 输出结果 [图 4] 总结 在以下情况下可以考虑使用观察者模式:  (1) 一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两个方面封装在独立的对象中使它们可以各自独立地改变复用

56700

设计模式---观察者模式

事件机制中的观察者模式 参考文章 ---- 引言 观察者模式设计模式中的 “超级模式”,其应用随处可见,我们以微信公众号为例。...一般是多对一依赖,即一个被观察者多个观察者 一旦大忽悠更新了公众号,所有订阅其公众号的粉丝都会接收到更新推送 ---- 角色 Subject(目标):目标又称为主题,它是指被观察的对象。...观察者模式在观察目标观察者之间建立一个抽象的耦合。观察目标只需要维持一个抽象观察者的集合,无须了解其具体观察者。由于观察目标观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。...观察者模式支持广播通信,观察目标会向所有已注册的观察者对象发送通知,简化了一对多系统设计的难度。...观察者模式满足 “开闭原则”的要求,增加新的具体观察者无须修改原有系统代码,在具体观察者与观察目标之间不存在关联关系的情况下,增加新的观察目标也很方便。

24120

设计模式-观察者模式

设计模式-观察者模式 在我们的程序中,可能需要在某些数据变化的时候,其他类做出一些响应。不能开一个线程,然后每隔一段时间去检查数据是否有变化。更希望的是当一些内数据变化时,主动推送变化。...什么是观察者模式 对象之间一对多依赖,当一个对象状态改变时,它的依赖都会收到通知并更新状态。 ? 观察者模式类图 ? 观察者设计模式包含哪些角色?...Subject: 抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存到一个集合中,每个主题都可以有任意数量的观察者,抽象主题提供接口,供增加删除观察者。...ConCreteSubject:具体主题具体观察者), 该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生变化时,给注册过的观察者发生通知。...Observer: 抽象观察者,是观察者的抽象类,定义了一个更新接口,使得在收到主题更改通知时更新自己 ConCrereObserver:具体观察者,实现抽象观察者定义的更新接口。

41310

设计模式-观察者模式

模式结构 观察者模式的主要角色: 抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。...具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者对象。...抽象观察者(Observer)角色:它是一个抽象类或接口,它包含了一个更新自己的抽象方法,当接到具体主题的更改通知时被调用。...源码分析 一说到观察者模式我们就想到监听器,那么在这个设计模式里面我们就学习并分析一下spring的事件监听机制,熟悉观察者模式的同时学习监听器原理。...其实,大名鼎鼎的 Reactive Programming (响应式编程) 也是从观察者模式脱胎而出的。我们所用的 webflux netty 就是基于 rstream 来设计的。

25410

设计模式-观察者模式

【导读】队列中有一种模式是发布/订阅模式,订阅者可以有多个,当发布者发布了消息的时候,订阅者会收到通知,这就是观察者模式,也可以理解为生产者/消费者。...一、定义 定义了对象之间一对多的依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化后,它的所有观察者都会收到通知并更新。...此时朋友圈是一个被观察者,你的账号是一个观察者。 Java提供了Observable(被观察者Observer(观察者),只需继承这两个类就可以实现观察者模式。...源码解析: (1)为什么观察者可以收到通知? 因为被观察者包含了一个观察者的集合。 ? 观察者需要进行注册: ?...= arrLocal.length-1; i>=0; i--) ((Observer)arrLocal[i]).update(this, arg); } 上述代码表明被观察者更新后为什么观察者会收到通知

56520

设计模式--观察者模式

Internet气象站项目:   提供温度、气压湿度的接口   测量数据更新时需时时通知给第三方 需要设计开放型API,便于其他第三方公司也能接入气象站获取数据 WeatherData类 ?...System.out.println("***Today mHumidity: "+mHumidity+"***"); } } 有些问题   1)其他第三方公司接入气象站获取数据的问题   2)无法在运行时动态的添加第三方 观察者模式原理...观察者模式就像定牛奶业务   1)奶站,Subject   2)用户,Observer Subject:登记注册、移除通知 ?...观察者模式: 对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化 用观察者模式设计重新设计的方案 ?...Observable Observer 用Java内置观察者重新设计该项目 内置观察者的注意点   Observable是类而不是接口 代码如下: package com.java.hexter.internetweather.jv

27310
领券