深入理解设计模式-行为型之观察者

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

概述

观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象发生变化时,所有依赖于它的观察者对象都会得到通知并更新。

在观察者模式中,有两个主要角色:

  • Subject(主题):维护一个观察者列表,提供方法用于添加、删除和通知观察者。
  • Observer(观察者):定义一个接口,用于接收主题对象的通知,以便在主题发生变化时更新自身状态。

电商系统的应用

促销通知的例子:
假设我们有一个电商系统,当某件商品有促销活动时,需要通知所有订阅了该商品的用户。在这个例子中,商品是主题,用户是观察者

首先,我们创建一个Subject接口,表示主题:

public interface Subject {
    void registerObserver(Observer o);//添加
    void removeObserver(Observer o);//删除
    void notifyObservers();//通知
}

接下来,我们创建一个Observer接口,表示观察者:

public interface Observer {
    void update(String discountInfo);
}

现在,我们创建一个具体的主题,如Product,实现Subject接口:

public class Product implements Subject {
    private ArrayList<Observer> observers;
    
    // 折扣消息
    private String discountInfo;
    public Product() {
        observers = new ArrayList<>();
   }
    public void registerObserver(Observer o) {
        observers.add(o);
   }
    public void removeObserver(Observer o) {
        int index = observers.indexOf(o);
        if (index >= 0) {
            observers.remove(index);
       }
   }
    public void notifyObservers() {
        for (Observer o : observers) {
            o.update(discountInfo);
       }
   }
    public void discountChanged() {
        notifyObservers();
   }
    public void setDiscountInfo(String discountInfo) {
        this.discountInfo = discountInfo;
        discountChanged();
   }
}

接着,我们创建一个具体的观察者,如User,实现Observer接口:

public class User implements Observer {
    private String userName;
    private String discountInfo;
    private Subject product;
    public User(String userName, Subject product) {
        this.userName = userName;
        this.product = product;
        product.registerObserver(this);
   }
    public void update(String discountInfo) {
        this.discountInfo = discountInfo;
        display();
   }
    public void display() {
        System.out.println("用户 " + userName + " 收到促销通知: " + discountInfo);
   }
}

2个接口,2个具体的类。
现在我们可以创建一个Product实例(主题)并向其注册User观察者。当Product的促销信息发生变化时,User会收到通知并显示促销信息。

public class Main {
    public static void main(String[] args) {
 	  	//注册2个用户
        User user1 = new User("张三", product);
        User user2 = new User("李四", product);
        // 模拟商品促销信息更新
  		   Product product = new Product();
        product.setDiscountInfo("本周末满100减50");
        product.setDiscountInfo("双十一全场5折");
   }
}

在这个例子中,我们创建了一个Product实例并向其注册了两个User观察者。当Product的促销信息发生变化时,所有观察者都会收到通知并更新自己的显示。这个例子展示了观察者模式在电商系统中的应用,如何实现商品和用户之间的交互。

源码应用

观察者模式在许多Java框架和库中都有应用,以下是一些常见的示例:

  • Java 内置类库:Java内置了一些使用观察者模式的类,例如 java.util.Observable 和 java.util.Observer。虽然在较新的Java版本中已经不推荐使用,但它们仍然是观察者模式的一个例子。你可以通过扩展 Observable 类并实现 Observer 接口来创建自己的观察者模式。

  • Swing GUI 框架:Swing中的事件监听就是观察者模式的应用。比如,你可以为按钮添加动作监听器,当按钮被点击时,监听器会收到通知并执行相应的操作。

  • Spring Framework:Spring框架广泛使用观察者模式,特别是在事件驱动编程中。例如,Spring的事件机制允许你在应用中发布和监听事件,当某些事件发生时,注册的监听器会收到通知并执行相应的逻辑。

  • Android开发:Android中的事件处理也是观察者模式的应用,例如,你可以为按钮添加点击事件监听器,当按钮被点击时,监听器会收到通知。

这些只是一些例子,观察者模式在许多框架和应用中都有广泛的应用。它提供了一种松耦合的方式,允许不同部分的代码能够在发生变化时保持同步,从而实现更加灵活和可维护的程序。文章来源地址https://www.toymoban.com/news/detail-651617.html

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

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

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

相关文章

  • 设计模式(十四):行为型之策略模式

    设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式(七):结构型之适配器模式 设计模式(八):结构型之装

    2024年02月09日
    浏览(43)
  • 设计模式(十三):行为型之模板方法模式

    设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式(七):结构型之适配器模式 设计模式(八):结构型之装

    2024年02月08日
    浏览(54)
  • 【Java 设计模式】行为型之状态模式

    状态模式(State Pattern)是一种行为型设计模式,用于通过将对象的行为封装到不同的状态类中,使得对象在不同的状态下具有不同的行为。状态模式允许对象在内部状态发生改变时改变其行为,而无需修改其代码。在本文中,我们将深入研究Java中状态模式的定义、结构、使

    2024年01月24日
    浏览(51)
  • 设计模式(二十):行为型之迭代器模式

    设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式(七):结构型之适配器模式 设计模式(八):结构型之装

    2024年02月09日
    浏览(53)
  • 【Java 设计模式】行为型之命令模式

    命令模式(Command Pattern)是一种行为型设计模式,用于将请求封装为对象,使得可以参数化客户端对象,并且能够排队、记录请求,以及支持撤销操作。在本文中,我们将深入研究Java中命令模式的定义、结构、使用场景以及如何在实际开发中应用。 命令模式是一种行为型设

    2024年01月23日
    浏览(43)
  • 【Java 设计模式】行为型之责任链模式

    责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,用于将请求发送者和接收者解耦,使得多个对象都有机会处理请求。责任链模式通过创建一个处理请求的链,将请求沿着链传递,直到有一个对象能够处理为止。在本文中,我们将深入研究Java中责任链模式的定

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

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

    2023年04月22日
    浏览(96)
  • 行为型设计模式之观察者模式【设计模式系列】

    C++技能系列 Linux通信架构系列 C++高性能优化编程系列 深入理解软件架构设计系列 高级C++并发线程编程 设计模式系列 期待你的关注哦!!! 现在的一切都是为将来的梦想编织翅膀,让梦想在现实中展翅高飞。 Now everything is for the future of dream weaving wings, let the dream fly in reali

    2024年02月15日
    浏览(43)
  • 设计模式【行为型】-- 观察者模式

    观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象之间建立一种一对多的依赖关系,使得当一个对象状态改变时,其相关依赖对象都能得到通知并自动更新。 主题( Subject ):也称为被观察者,它维护一个观察者列表,并提供添加、删除和通知观察者的方法。

    2024年02月15日
    浏览(51)
  • 设计模式行为型——观察者模式

    目录 观察者模式的定义 观察者模式的实现 观察者模式角色 观察者模式类图 观察者模式代码实现 观察者模式的特点 优点 缺点 使用场景 注意事项 实际应用         观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,使得当一个对象的

    2024年02月13日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包