代码编织梦想

观察者模式

观察者模式定义了对象之间的一对多依赖,让多个观察者同时监听某个主题对象,当主体对象发生变化时,它的所有观察者都会收到响应的通知。

基于JDK对观察者模式提供的支持,下面举个观察者模式的例子。

创建被观察者

import java.util.Observable;

/**
 * @author xzl6656
 * @create 2023-03-20 14:24
 * @description 某某微信公众号
 *
 *被观察者
 **/
public class WeChatOfficialAccount extends Observable {
    /**
     * 公众号名称
     */
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public WeChatOfficialAccount(String name) {
        this.name = name;
    }

    public void publishNews(News news) {
        System.out.println(this.name+"发布了新闻:"+news.getTitle()+"->"+news.getContent());
        //设置标识位 changed = true,表示被观察者发生了改变
        setChanged();
        //通知所有观察者,可以给观察者传递数据
        notifyObservers(news);
    }
}

新闻类

import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * @author xzl6656
 * @create 2023-03-20 14:28
 * @description 新闻类
 **/
@Data
@AllArgsConstructor
public class News {
    /**
     *标题
     */
    private String title;
    /**
     * 内容
     */
    private String content;

}

观察者类

import java.util.Observable;
import java.util.Observer;

/**
 * @author xzl6656
 * @create 2023-03-20 14:34
 * @description 粉丝类
 * 观察者类
 **/
public class Fan implements Observer {
    /**
     * 姓名
     */
    private String name;

    public Fan(String name) {
        this.name = name;
    }
    /**
     * 公众号如果有更新,粉丝的这个方法就会被调用
     * @param o 公众号
     * @param arg 发布的新闻
     */
    @Override
    public void update(Observable o, Object arg) {
        WeChatOfficialAccount weChatOfficialAccount = (WeChatOfficialAccount) o;
        News news = (News) arg;
        System.out.println(weChatOfficialAccount.getName()+"更新了,"+this.name+"收到了更新内容:"+news.getTitle()+"->"+news.getContent());

    }
}

测试一下

public class Application {
    public static void main(String[] args) {
        //创建公众号
        WeChatOfficialAccount officialAccount = new WeChatOfficialAccount("天下奇异录");
        //添加两个粉丝
        officialAccount.addObserver(new Fan("小张"));
        officialAccount.addObserver(new Fan("小徐"));
        //公众号发布新闻
        officialAccount.publishNews(new News("经济大萧条","程序员行业开始走下坡路,大家都卷起来了"));
    }
}

打印效果:

WeChatOfficialAccount类是被观察者对象,被观察者对象需要继承JDK的Observable类,继承后,被观察者对象包含如下属性和方法:

 这些方法都是线程安全方法(加了synchronized同步锁)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JavaBoy_XZL/article/details/129667586

javascript 观察者模式 (通俗易懂)_缘自世界的博客-爱代码爱编程_js观察者模式 阮一峰

观察者模式又叫做发布-订阅模式。这是一种一对多的对象依赖关系,当被依赖的对象的状态发生改变时,所有依赖于它的对象都将得到通知。 生活中的观察者模式 就如我们在专卖店预定商品(如:苹果手机),我们会向专卖店提交预定申请,然

简单通俗理解js设计模式-观察者模式_沿海公路的出口的博客-爱代码爱编程

观察者模式也可以称为订阅模式,是一种从发布,到订阅,再到通知的过程。观察者模式有五个重要的模块,分别是:发布者、发布列表、增加订阅者、发布消息、订阅者收到订阅消息。 什么是观察者模式? 观察者模式就是定义了一个对象一

通俗易懂的设计模式-爱代码爱编程

<!-- TOC --> 通俗易懂的设计模式 零、使用 1、安装2、测试 一、什么是设计模式二、设计模式的类型三、设计模式的六大原则 四、UML类图 1、看懂UML类图2、解释 五

observable源码学习,观察者模式_一只懒惰的猿的博客-爱代码爱编程

      观察者模式理解:         观察者模式是一种对象行为模式,描述或者说是定义了对象之间一对多的对象关系。如果你了解发布订阅模式,那么理解观察者模式就容易多了。在《Head First设计模式》中观察者模式第一段中讲到,出版者+订阅者=观察者模式。意思就是说,一个出版者对应多个订阅者,出版者将消息告知给订阅者。这样的一套模式称之为观察者模式

Unity (观察者模式)通俗易懂-爱代码爱编程

先借助一个经典案例理解观察者模式 在程序开发过程中,我们经常需要使用一个类来触发事件,同时有很多类要监听触发信息,就像猫和老鼠一样,我们在猫身上挂了一个铃铛,当猫出现了,铃铛就会响起,老鼠们接受到了铃铛响起的事件,就会触发逃跑方法。老鼠有很多个,它们就是观察者。猫只有一只,它属于被观察者。 观察者模式: 定义了一种一对多的依赖关系,让多个观察者对象同时

厚积薄发打卡Day45: [itcast] GoF23通俗易懂的设计模式之 <观察者模式>-爱代码爱编程

前言: 视频教程:黑马程序员Java设计模式详解,全网最全23种Java设计模式 什么是设计模式? 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。1995年,GoF(Gang of Four,四人组)合作出版了《设计模式:可复用面向对

通俗易懂的java设计模式篇!_我就叫cv吧的博客-爱代码爱编程

1.设计模式的六大原则 1.1.软件设计开发原则 (1)单一职责原则 一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因。就是实现高内聚、低耦合的指导方针。高内聚:尽可能类的每一个成员方法

jvm监控搭建-爱代码爱编程

文章目录 JVM监控搭建整体架构JolokiaTelegrafInfluxdbGrafana JVM监控搭建 整体架构 JVM 的各种内存信息,会通过 JMX 接口进行暴露。 Jolokia

head first 设计模式 -爱代码爱编程

文章目录 初识报社与用户们实现方案及缺陷 出版社 + 订阅者 = 观察者模式定义优点松耦合 案例java内置Observer 和 Observable 初识 报社与用户们

2.观察者模式-爱代码爱编程

1.什么是观察者模式? 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖都会收到通知并自动更新。 2.结合需求案例来理解此模式 注意:完整项目代码地址在文章末尾 借用设计模式hea

最全最通俗易懂的设计模式全集_浅显易懂设计模式-爱代码爱编程

——————————————————— 原来这世上,比之成双鸳侣,多的却是相思枉然 ——————————————————— 设计模式共计23种,可以分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建

设计模式2 -爱代码爱编程

定义: 观察者模式又叫发布订阅模式,它定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 组成: Subject(通知者/被观察者):指代的就是那个被观察者,通常由接口或者抽象类实现,常见方法有addObserver/deleteObserver方法用来增删观察者,notifyObservers状态改变时通

观察者模式(通俗易懂)_观察者模式通俗-爱代码爱编程

理解: 观察者模式简单的理解就是新建一个接口,在需要使用该接口的地方实现该接口。在需要告诉该接口的具体方法中实现该接口实例,并调用需要使用的方法,这就是所谓的订阅 观察者原理:把注册为观察者的用户,有更新就发送给他们。

通俗易懂的java设计模式之 -爱代码爱编程

观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间一种一对多的依赖关系,使得当一个对象状态发生改变时,它的所有依赖对象都会得到通知并自动更新。在Java中,观察者模式可以使用Java内置的观察者模式接口和类来实现。 下面是一个简单的观察者模式的例子,假设我们有一个简单的气象站应用程序,它需要定期地更新天气数据,并通知多