Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >观察者模式观察者模式

观察者模式观察者模式

作者头像
OPice
发布于 2021-09-07 09:03:59
发布于 2021-09-07 09:03:59
88500
代码可运行
举报
文章被收录于专栏:D·技术专栏D·技术专栏
运行总次数:0
代码可运行

介绍

观察者属于行为模式,当一个对象改变时,会通知订阅者做相应的处理。 是一种低耦合的方式,观察者和被观察者者之间不互相依赖。 缺点或者说需要注意的点:1、如果观察者很多,要通知所有的观察者需要很多时间 2、观察者之间互相循环调用,会导致系统崩溃。

Demo

1、定义一个被观察者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Subject {
    //监控的状态
    private Integer state;

    //维护所有观察者的列表
    private List<Observer> observerList = new ArrayList<>();

    public Integer getState() {
        return state;
    }

    //状态被改变 通知所有的观察者
    public void setState(Integer state) {
        this.state = state;
        notifyAllObserver();
    }

    public void attach(Observer observer) {
        observerList.add(observer);
    }

    //通知
    public void notifyAllObserver() {
        observerList.forEach(Observer::update);
    }
}

2、定义多个观察者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 二进制观察者
 */
public class BinaryObserver extends Observer {

    public BinaryObserver(Subject subject) {
        this.subject = subject;
        subject.attach(this);
    }

    @Override
    void update() {
        System.out.println("BinaryObserver :"+Integer.toBinaryString(subject.getState()));
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 八进制观察者
 */
public class OctalObserver extends Observer {
    public OctalObserver(Subject subject) {
        this.subject = subject;
        subject.attach(this);
    }

    @Override
    void update() {
        System.out.println("OctalObserver :" + Integer.toOctalString(subject.getState()));
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 十六进制观察者
 */
public class HexObserver extends Observer {
    public HexObserver(Subject subject) {
        this.subject = subject;
        subject.attach(this);
    }

    @Override
    void update() {
        System.out.println("HexObserver :" + Integer.toHexString(subject.getState()));
    }
}

3、执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ObserverPatternTest {
    public static void main(String[] args) {
        Subject subject = new Subject();

        new BinaryObserver(subject);
        new HexObserver(subject);
        new OctalObserver(subject);

        subject.setState(10);
        subject.setState(15);
    }
}

4、执行结果

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
23种设计模式之观察者模式
观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
Java技术债务
2022/09/26
2820
23种设计模式之观察者模式
观察者模式
观察者模式对于我们来说,真是再简单不过了。无外乎两个操作,观察者订阅自己关心的主题和主题有数据变化后通知观察者们。
程序视点
2025/04/09
1310
观察者模式
观察者模式使用三个类 Subject、Observer 和 Client。Subject 对象带有绑定观察者到 Client 对象和从 Client 对象解绑观察者的方法。我们创建 Subject 类、Observer 抽象类和扩展了抽象类 Observer 的实体类。
yechaoa
2022/06/10
3580
观察者模式
12.观察者/状态模式
12.观察者/状态模式 观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。 如
Java帮帮
2018/03/15
1.1K0
12.观察者/状态模式
Golang语言情怀-第30期 Go 语言设计模式 观察者
我们下面以上班(在上班的时候有些同事会看股票行情,有些还会看NBA,老板则偶尔会走动,前台秘书和同事的关系比较好,等老板出来走动的时候,她会通知每位同事)为例,其UML类图如下:
李海彬
2021/02/05
3740
Golang语言情怀-第30期 Go 语言设计模式 观察者
初探Java设计模式3:行为型模式(策略,观察者等)
行为型模式关注的是各个类之间的相互作用,将职责划分清楚,使得我们的代码更加地清晰。
程序员黄小斜
2019/04/06
1.2K0
JAVA 设计模式 观察者模式
本文介绍了观察者模式在JAVA中的实现方式,通过具体实例讲解了观察者模式在项目中的使用,以及观察者模式在实现项目中的具体应用。
静默虚空
2018/01/05
7310
JAVA 设计模式 观察者模式
【设计模式】之观察者模式
在这个示例中,描述了新闻发布者。在典型的流程中,新闻阅读者订阅新闻。 一单一个新的新闻被出版商发布了,所有的观察者都会收到通知。 在这里出版商的角色就是一个主体,订阅者就是观察者。 一个出版商可以有一个或者多个订阅者。
青山师
2023/05/05
1820
【设计模式】之观察者模式
Java设计模式解析 ---单例模式的实现
设计模式是我们日常工作中不可或缺的一部分。设计模式是一组经过验证的解决方案,用于解决在软件设计中经常遇到的问题。在本文中,我们将探讨在实际工作中用到过哪些设计模式,并详细介绍单例模式的实现。通过深入理解这些设计模式,我们可以更好地设计出可维护、可扩展和高性能的软件系统。
疯狂的KK
2023/09/22
1660
Java设计模式解析 ---单例模式的实现
一个Java小白面试得力集团的收获
前言 昨天知道得力集团在某一个培训机构进行校园招聘。于是我今天就来了,听了一下宣讲内容。发现得力集团刚8月份在武汉成立了研究院,主要是做云服务,从0开始,现在的团队规模大概在20多人。一开始宣讲的是
用户2032165
2018/06/05
7550
Java设计模式学习记录-观察者模式
观察者模式也是对象行为模式的一种,又叫做发表-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、 咱们目前用的最多的就是各种MQ(Message Queue)都是基于这个模式的思想来实现的,生产者产生数据放到一个队列中,消费者观察生产者的消息队列的变化,从而接收消息,执行消费者本身的逻辑。
纪莫
2018/10/10
3320
Java设计模式学习记录-观察者模式
设计模式之观察者模式
观察者模式又称为发布-订阅(Publish/Subscribe)模式,是23种设计模式之一。DP中是这么定义观察者模式的:
端碗吹水
2020/09/23
4750
设计模式之观察者模式
观察者模式(Observer)
1. 问题场景 当一个对象的状态放生改变的时候,如何让依赖于它的所有对象得到通知,并进行相应的处理? 2. UML图 Subject:目标对象,通常具有以下功能 一个目标对象可以被多个观察者观察 目标
Java高级架构
2018/07/20
4870
设计模式-观察者模式
自从有了微信公众号后,关注了某个公众号基本每天都有新的文章推送的通知,我们可以很方便的进行查阅,了解最新的资讯,什么老美放大水、什么中东又暴乱了,第一时间就知道了,而这里的关注和通知的行为其实有点类似观察者模式的观察者。用户关注公众号,公众号(被观察者)更新文章通知所有用户(观察者)。
逍遥壮士
2020/09/18
3830
漫画:设计模式中的 “观察者模式”
如果点击“道具”按钮,游戏里的主角会使用道具;如果点击“魔法”按钮,游戏里的主角会使用魔法。
小灰
2020/07/09
7120
漫画:设计模式中的 “观察者模式”
EventBus观察者模式
EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案。
叔牙
2020/11/19
7030
EventBus观察者模式
设计模式:观察者模式解析与Go语言实现
观察者模式(Observer Pattern)是软件设计模式中的一种行为型模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。
运维开发王义杰
2023/11/20
2610
设计模式:观察者模式解析与Go语言实现
Java观察者模式(Observer)
  观察者模式java GOF23种设计模式中的一种。在最近介绍的Redis和ActiveMQ中都涉及到了观察者模式,所以我们在本文详细介绍下此模式:
用户4919348
2019/04/02
8160
Java观察者模式(Observer)
观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。这种模式主要用于实现发布-订阅机制。
码事漫谈
2024/12/20
1370
观察者模式
Java设计模式之(十二)——观察者模式
观察者模式(Observer Design Pattern):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会得到通知并自动更新。
IT可乐
2021/12/04
5.2K0
Java设计模式之(十二)——观察者模式
相关推荐
23种设计模式之观察者模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验