行为型-观察者模式(Observer Pattern)

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

概述

详细介绍观察者模式(Observer Pattern),并说明优缺点与使用场景: 观察者模式是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖它的对象都会自动收到通知并更新。该模式包含两个核心角色:被观察者(Subject)和观察者(Observer)。

被观察者维护了一个观察者列表,提供了订阅、取消订阅、通知等方法。当被观察者的状态变化时,会遍历观察者列表,并逐个调用观察者的更新方法。

优点:

  • 解耦性:被观察者和观察者之间是松耦合的,可以独立地变化和扩展,可以方便地增加或删除观察者,而不会影响其他对象。
  • 可扩展性:可以动态地添加新的观察者,使系统更具灵活性和可扩展性。
  • 消息传递:被观察者通过通知观察者的方式,实现了对象之间的消息传递。

缺点:

  • 观察者过多时,通知所有观察者的操作可能会消耗大量的时间和资源。
  • 观察者之间存在依赖关系,如果观察者之间的处理逻辑相互影响,会增加代码的复杂性。

适用场景:

  • 当一个对象的状态变化需要通知其他对象,并确保这些对象随着状态变化而自动更新时。
  • 当对象之间存在一种一对多的关系,即一个对象的改变会导致其他相关对象的改变时。
  • 当需要实现松耦合的设计,使得被观察者和观察者之间可以独立地变化时。

示例

下面是一个简单的示例代码,模拟了一个新闻发布订阅系统。NewsPublisher 是被观察者,Subscriber 是观察者。

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

// 被观察者
interface NewsPublisher {
    void subscribe(Subscriber subscriber);

    void unsubscribe(Subscriber subscriber);

    void notifySubscribers(String news);
}

// 观察者
interface Subscriber {
    void update(String news);
}

// 具体的被观察者类
class Newspaper implements NewsPublisher {
    private List<Subscriber> subscribers = new ArrayList<>();

    @Override
    public void subscribe(Subscriber subscriber) {
        subscribers.add(subscriber);
    }

    @Override
    public void unsubscribe(Subscriber subscriber) {
        subscribers.remove(subscriber);
    }

    @Override
    public void notifySubscribers(String news) {
        for (Subscriber subscriber : subscribers) {
            subscriber.update(news);
        }
    }

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

// 具体的观察者类
class EmailSubscriber implements Subscriber {
    private String email;

    public EmailSubscriber(String email) {
        this.email = email;
    }

    @Override
    public void update(String news) {
        System.out.println("邮件订阅者收到新闻:" + news);
        System.out.println("发送邮件到:" + email);
    }
}

public class ObserverPatternExample {
    public static void main(String[] args) {
        Newspaper newspaper = new Newspaper();

        Subscriber subscriber1 = new EmailSubscriber("subscriber1@example.com");
        Subscriber subscriber2 = new EmailSubscriber("subscriber2@example.com");

        newspaper.subscribe(subscriber1);
        newspaper.subscribe(subscriber2);

        newspaper.publishNews("观察者模式示例");

        newspaper.unsubscribe(subscriber2);

        newspaper.publishNews("观察者模式更新");
    }
}

输出结果:

发布新闻:观察者模式示例

邮件订阅者收到新闻:观察者模式示例

发送邮件到:subscriber1@example.com文章来源地址https://www.toymoban.com/news/detail-611746.html

邮件订阅者收到新闻:观察者模式示例

发送邮件到:subscriber2@example.com

发布新闻:观察者模式更新

邮件订阅者收到新闻:观察者模式更新

发送邮件到:subscriber1@example.com

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

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

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

相关文章

  • 观察者设计模式(Observer Design Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]

            观察者设计模式(Observer Design Pattern)是一种行为型设计模式,它定义了一种对象间的一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生改变时,通知所有观察者对象,使它们能够自动更新。 主题(Subject):主题是一个抽象类或

    2023年04月24日
    浏览(46)
  • 观察者模式(Observer)

    观察着模式是一种行为设计模式,可以用来定义对象间的一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者

    2024年02月14日
    浏览(39)
  • 观察者模式(Observer)

    事件订阅者者(Event-Subscriber) 监听者(Listener) 观察者 是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个“观察”该对象的其他对象。 1. 问题 假如你有两种类型的对象 :“顾客”和“商店”。顾客对某个特定品牌的产品非常感兴趣(例如最

    2024年02月12日
    浏览(37)
  • 设计模式—观察者模式(Observer)

    目录 思维导图 一、什么是观察者模式? 二、有什么优点吗? 三、有什么缺点吗? 四、什么时候使用观察者模式? 五、代码展示 ①、双向耦合的代码 ②、解耦实践一 ③、解耦实践二 ④、观察者模式 六、这个模式涉及到了哪些知识点? 又叫发布-订阅(publish/Subscrib)模式

    2024年02月11日
    浏览(44)
  • Kotlin~Observer观察者模式

    概念 定义一对多的依赖关系,让多个观察者同时监听一个主题对象。 角色介绍 Subject:主题,也称被观察者,它是具有状态的对象维护着一个观察者列表。提供添加、删除和通知观察者的方法。 ConcreteSubject:具体主题,主题的具体实现类,维护观察者列表,状态改变时通知

    2024年02月15日
    浏览(51)
  • 【设计模式-06】Observer观察者模式

    事件处理模型 场景示例:小朋友睡醒了哭,饿! 核心思路和逻辑 定义事件类 ActionEvent 定义接口类 ActionListener 和接口方法 void actionPerformed(ActionEvent e); 自定义 Button 类,模拟按钮点击事件 自定义监听者 MyActionEventListener 和 MyActionEventListener2 实现接口 void actionPerformed(ActionEvent

    2024年01月17日
    浏览(45)
  • 「观察者(Observer)」设计模式 Swift实现

    观察者设计模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会受到通知并自动更新。 在这种模式中,被观察者对象(Subject)存储其观察者对象(Observer)列表,并提供了用

    2024年02月16日
    浏览(39)
  • 行为型模式 | 观察者模式

    观察者模式又叫做发布-订阅(Publish/Subscribe)模式,定义了一种一对多的依赖关系 。让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 软件系统常常要求在某一个对象的状态发生变化的时候

    2024年01月22日
    浏览(79)
  • 行为型模式之观察者模式

    观察者模式(Observer Pattern) 观察者模式是一种行为设计模式,用于建立对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会自动收到通知并更新。 在观察者模式中,有两类角色:被观察者(也称为主题或可观察者)和观察者。 被观察者维护了

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

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

    2024年02月15日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包