什么是观察者设计模式?

这篇具有很好参考价值的文章主要介绍了什么是观察者设计模式?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是观察者

观察者模式的主要角色包括:

  • 主题(Subject): 也称为被观察者或可观察对象。它维护了一系列观察者对象,并提供方法用于注册、删除和通知观察者。当主题的状态发生改变时,它会通知所有注册的观察者。

  • 观察者(Observer): 观察主题的对象。观察者定义了一个更新方法,主题在状态改变时会调用这个方法来通知观察者。观察者可以根据主题的通知来执行相应的操作。

什么是观察者设计模式?

观察者的应用

观察者模式在实际应用中经常用于处理事件驱动的编程场景,如图形用户界面(GUI)开发、消息传递系统等。通过观察者模式,可以实现对象之间的解耦,提高系统的灵活性和可维护性。
Spring Framework中,观察者模式的应用非常广泛,尤其在Spring的事件驱动机制中。Spring的事件机制允许对象在特定事件发生时发布事件,并允许其他对象注册为监听器以接收这些事件。这与观察者模式的概念非常相似,其中事件源就是观察者模式中的主题,而事件监听器就是观察者。

应用程序事件: Spring允许应用程序发布自定义事件,并提供了ApplicationEvent和ApplicationListener接口。应用程序可以创建自定义事件类,并在需要时发布这些事件。其他对象可以实现ApplicationListener接口并注册为监听器,以接收并处理这些事件。

Spring MVC事件: 在Spring MVC中,可以使用 ApplicationEventPublisher 接口发布自定义事件,并通过@EventListener注解或实现 ApplicationListener 接口的方式来处理这些事件。这使得在MVC架构中进行解耦和处理事件变得更加容易。

如何实现

日常中比较经典的实例场景 , 举个例子,如博客园的文章订阅, 当关注的作者发布了新的文章后,关注其的粉丝就会收到消息通知,这里将代码拆出来如下。

import java.util.ArrayList;
import java.util.List;

// 主题接口
interface Subject {
    void registerObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String news);
}

// 观察者接口
interface Observer {
    void update(String news);
}

// 新闻发布者
class NewsPublisher implements Subject {
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers(String news) {
        for (Observer observer : observers) {
            observer.update(news);
        }
    }

    public void publishNews(String news) {
        System.out.println("发布新闻: " + news);
        notifyObservers(news);
    }
}

// 观察者 - 读者
class Reader implements Observer {
    private String name;

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

    @Override
    public void update(String news) {
        System.out.println(name + " 收到新闻: " + news);
    }
}

public class ObserverPatternExample {
        // 创建新闻发布者
        NewsPublisher publisher = new NewsPublisher();

        // 创建两个观察者(读者)
        Observer reader1 = new Reader("小明");
        Observer reader2 = new Reader("小红");

        // 注册观察者
        publisher.registerObserver(reader1);
        publisher.registerObserver(reader2);

        // 发布新闻
        publisher.publishNews("Java 21发布了!");
        publisher.publishNews("Spring Framework 更新了!");

        // 读者取消订阅
        publisher.removeObserver(reader2);

        // 再次发布新闻
        publisher.publishNews("小米 su7 上线了,雷总为你开车门,快行动起来吧!");
    }
}

程序运行日志如下

发布新闻: Java 21发布了!
小明 收到新闻: Java 21发布了!
小红 收到新闻: Java 21发布了!
发布新闻: Spring Framework 更新了!
小明 收到新闻: Spring Framework 更新了!
小红 收到新闻: Spring Framework 更新了!
发布新闻: 小米 su7 上线了,雷总为你开车门,快行动起来吧!
小明 收到新闻: 小米 su7 上线了,雷总为你开车门,快行动起来吧!

结语

这里介绍观察者,是希望从易于理解的概念开始对 Reactive Programing 的理解,在响应式编程中多数基于观察者模式思想演变而来,如在 Reactor 中,订阅者(Subscriber)订阅了数据流(Publisher),并在数据流中的元素发生变化时接收通知。

通知机制: 在观察者模式中,主题状态的变化会触发通知,通知会被发送给所有注册的观察者。在Reactor中,数据流中的元素发生变化时会触发通知,通知会被发送给所有订阅了该数据流的订阅者。

事件驱动编程: 观察者模式和 Reactor 都支持事件驱动的编程模型。在观察者模式中,事件源(主题)发生事件(状态变化),并通知观察者。在 Reactor 中,事件(数据元素)在流中传递,并且订阅者可以对这些事件进行响应式地处理。文章来源地址https://www.toymoban.com/news/detail-854652.html

到了这里,关于什么是观察者设计模式?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】观察者模式

    观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 Subject:抽象主题(被观察者

    2024年02月13日
    浏览(49)
  • 设计模式——14. 观察者模式

    观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都能够自动收到通知并更新自己的状态,以保持与被观察对象的同步。观察者模式也被称为发布-订阅模式。 观察者模式包含以

    2024年02月07日
    浏览(42)
  • 设计模式(11)观察者模式

    一、概述: 1、定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 2、结构图: 实现  调用

    2024年02月11日
    浏览(49)
  • 设计模式之观察者模式

    可以帮你的对象知悉现况,不会错过该对象感兴趣的事。对象甚至在运行时可决定是否要继续被通知。 从报纸和杂志的订阅说起: 报社的业务就是出版报纸 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。 当你不

    2024年01月24日
    浏览(51)
  • 重温设计模式 --- 观察者模式

    观察者模式 是一种行为型设计模式,它允许对象之间建立一种一对多的关系,使得当一个对象状态改变时,所有依赖它的对象都能够自动得到通知并更新自己的状态。该模式可以帮助我们实现松耦合的系统,以便更好地应对变化和扩展。 在观察者模式中,有两个角色: 观察

    2024年02月13日
    浏览(56)
  • 设计模式-观察者

    观察者模式是一种广泛应用于软件开发中的行为设计模式,尤其是在面向对象编程(OOP)中。该模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新 在观察者模式中,存在两个主要角色: 主题(Subject) 或 被

    2024年01月22日
    浏览(45)
  • 观察者设计模式

    行为型模式(Behavioral Patterns):这类模式主要关注对象之间的通信。它们 分别是: 职责链模式(Chain of Responsibility) 命令模式(Command) 解释器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 备忘录模式(Memento) 观察者模式(Observer) 状态模式(State) 策略

    2024年01月24日
    浏览(48)
  • 设计模式:行为型模式 - 观察者模式

    定义: 又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 在观察者模式中有如下角色: Subject:抽象主题(抽象被观察

    2023年04月22日
    浏览(95)
  • 6.设计模式之观察者模式

    观察者模式 定义了多个对象间的一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并被自动更新 。这种模式又称 发布-订阅模式 、模型-视图模式,是一种 对象行为型模式 。 观察者模式中的四种角色: 抽象主题 (Subject)角色:也叫抽象

    2024年02月04日
    浏览(51)
  • 设计模式之二:观察者模式

    假定我们需要为Weather-O-Rama公司建立一个气象站系统,除已有的WeatherData有数据源类,还需要更新三个布告板的显示:目前状况(温度、湿度、气压)、气象统计和天气预报。  1 以下是一个可能的实现 上述实现有以下问题存在: 针对具体实现编程,而非针对接口(currentCon

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包