前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >15.设计模式--观察者模式(Observer模式)

15.设计模式--观察者模式(Observer模式)

作者头像
大猫的Java笔记
发布于 2021-11-11 01:41:36
发布于 2021-11-11 01:41:36
3770
举报
文章被收录于专栏:大猫的Java笔记大猫的Java笔记

1.定义

观察者模式是一种行为型模式,又称发布-订阅模式(Publish-Subscribe:Pub/Sub)。它是一种通知机制,让发送通知的一方(被观察方)和接收通知的一方(观察者)能彼此分离,互不影响。

无论是QQ还是微信都有群聊功能,只要在群中的任意成员发布一条消息,那么整个群中所有的用户都会收到消息。这所有的用户仿佛都是一个观察者,时刻在观察群中是否有新消息,如果有新的消息,那么马上通知群里除了屏蔽群消息的用户。

2.观察者模式结构图

GroupChat是群的抽象,其中引用了Observer也就是群中的用户,同时拥有对用户的新增、删除、产生消息以及消息通知方法。ConcreteGroupChat是GroupChat的具体实现,所以继承于GroupChat。而Observer是对用户的抽象即观察者的抽象,其中包含了一个写消息的方法,相当于将消息发给对应的用户,进行展示。而User则是对Observer具体的实现。

3.观察者模式实现

GroupChat中引用了Observer,用于保存群中的用户,当然其中还包含了对用户的新增、删除、产生消息以及消息通知方法。消息通知就是把消息推送给群里的所有用户。

ConcreteGroupChat是具体的群,为了方便演示,没有定义群的基本信息,例如群名称等信息,只是将群的消息产生使用了一个随机数字来产生。

Observer就是观察者,用于观察群中消息的产生,但是Observer只是抽象的观察者,只是定义方法,而不做具体的实现,具体怎么做是子类的事情。

User就是具体的观察者,实现于Observer,对于消息接受到以后怎么处理都是通过实现writeMessage方法,文中只是做了消息的打印,谁接受到了消息。

下面我们新建了一个群,同时添加群中成员为张三和李四,然后调用群的产生消息方法,此时可以看到张三和李四分别都收到了10条消息。

观察者模式中登场的角色

Subject(观察对象),Subject角色,相当于被观察的对象,文中由GroupChat扮演此角色

ConcreteSubject(具体的观察对象),ConcreteSubject角色,是对Subject的具体实现,文中由ConcreteGroupChat扮演此角色。

Observer(观察者),Observer角色,是观察消息的变化,文中由Observer类扮演此角色

ConcreteObserver(具体的观察者),是对Observer的具体实现,文中由User类进行扮演此角色。

参考文献《图解设计模式》

代码获取地址:https://gitee.com/bughong/design-pattern

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大猫的Java笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
跟着GPT学设计模式之观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,其依赖对象都能够收到通知并自动更新。
codetrend
2024/06/06
1140
跟着GPT学设计模式之观察者模式
观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
定义对象一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都得到通知并自动更新。
noteless
2018/12/27
5960
Java-观察者模式(订阅-发布者模式)
观察者模式也叫订阅-发布者模式,是一种一对一或者一对多的依赖关系,当一个对象改变状态,依赖它的对象会收到通知并自动更新。
android_薛之涛
2018/12/27
1.7K0
设计模式-观察者模式
软件系统很多时候需要这样的情况,一旦发生故障,就通知对应的系统或模块,使之能够及时处理。
breezedancer
2018/09/12
5120
设计模式-观察者模式
设计模式-观察者模式
模式定义 定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。 设计原则 为
武培轩
2018/04/18
8450
设计模式-观察者模式
设计模式-观察者模式
观察者(Observer)模式指在被观察者的状态发生变化时,系统基于事件驱动理论将其状态通知到订阅模式的观察者对象中,以完成状态的修改和事件的传播。这种模式有时又叫做发布-订阅模式或者模型-视图模式。
别团等shy哥发育
2023/10/17
1690
设计模式-观察者模式
java设计模式-观察者模式
模式定义 定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。主题(Subject)是被观察的对象,而其所有依赖者(Observer)称为观察者。 设计原则 为交
三哥
2018/06/15
6820
设计模式16之观察者模式
观察者模式你肯定知道并且用过,如果你没听过观察者模式这几个词,那发布-订阅模型你肯定知道。我们在使用Kafka等消息中间件时,就用到了发布-订阅模式进行数据的生产消费。你可以将发布-订阅模式理解为观察者模式。
Lvshen
2022/05/05
2890
设计模式16之观察者模式
JAVA 设计模式 观察者模式
本文介绍了观察者模式在JAVA中的实现方式,通过具体实例讲解了观察者模式在项目中的使用,以及观察者模式在实现项目中的具体应用。
静默虚空
2018/01/05
7310
JAVA 设计模式 观察者模式
设计模式学习笔记(十九)观察者模式及应用场景
观察者模式(Observer Design Pattern),也叫做发布订阅模式(Publish-Subscribe Design Pattern)、模型-视图(Model-View)模式、源-监听器(Source-Listener)模式、从属者(Dependents)模式。指在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。
归思君
2023/10/16
4200
设计模式学习笔记(十九)观察者模式及应用场景
Java设计模式之(十二)——观察者模式
观察者模式(Observer Design Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会得到通知并自动更新。
IT可乐
2021/12/04
5.2K0
Java设计模式之(十二)——观察者模式
设计模式实战-观察者模式,你知道发布订阅怎么实现吗
意思是:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
架构师修炼
2020/07/17
6390
设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
观测模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
黄规速
2022/04/14
4090
设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
Java 设计模式系列(19) —— 观察者模式
观察者模式的定义 定义对象中一种一对多的依赖关系,使得当一个对象改变时,则所有依赖于他的对象都会得到通知并被自动更新
求和小熊猫
2021/02/02
2470
Java 设计模式系列(19) —— 观察者模式
一起学设计模式 - 观察者模式
观察者模式是一种使用率极高的模式,用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。
battcn
2018/08/03
3540
一起学设计模式 - 观察者模式
设计模式之观察者模式
  随着工作时间的越来越长,发现对设计模式缺失的坏处越来越明显,但是当你知道某种设计模式的实现方式以后,你会发现,其实工作中早已经玩过这些东西,但是你之前并不知道它属于设计模式的一种,今天就先介绍一种设计模式:观察者模式,然后我们也手动实现观察者模式以加深印象。
阿豪聊干货
2018/08/09
2360
设计模式之观察者模式
设计模式-观察者模式
观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。UML结构图如下:
架构狂人
2023/10/13
1800
设计模式-观察者模式
观察者模式详解
从字面意思上去理解,所谓的观察者模式,首先有观察者(一个或者多个),被观察者(一个)。当被观察者状态发生变化的时候,就会去通知它的所有的观察者,然后由观察者根据被观察者的情况作出反应。观察者模式属于行为型模式。
开发者
2019/12/26
4220
观察者模式详解
设计模式的征途—15.观察者(Observer)模式
在日常生活中,交通信号灯指挥者日益拥挤的城市交通。红灯亮,汽车停止;绿灯亮,汽车继续前行;在这个过程中,交通信号灯是汽车的观察目标,而汽车则是观察者。随着交通信号灯的变化,汽车的行为也会随之变化,一盏交通信号灯可以指挥多辆汽车。在软件系统中,有些对象之间也存在类似交通信号灯和汽车之间的关系,一个对象的状态或行为的变化将会导致其他对象的状态或者行为也发生改变,它们之间将产生联动,正所谓牵一发而动全身。为了更好地描述对象之间存在的这种一对多的联动,观察者模式应运而生。
Edison Zhou
2018/08/21
3930
设计模式的征途—15.观察者(Observer)模式
观察者模式(Observer)
观察者模式(Observer) 对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 类图: 1.抽象主题(Subject)角色:把所有对观察者对象的引
qubianzhong
2019/07/01
7830
观察者模式(Observer)
相关推荐
跟着GPT学设计模式之观察者模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档