行为型模式之观察者模式

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

观察者模式(Observer Pattern)

观察者模式是一种行为设计模式,用于建立对象之间的一对多依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都会自动收到通知并更新。

在观察者模式中,有两类角色:被观察者(也称为主题或可观察者)和观察者。
被观察者维护了一个观察者列表,并提供了注册、注销和通知观察者的方法。观察者通过注册自己来订阅被观察者的状态变化。
当被观察者的状态发生改变时,它会遍历观察者列表并调用各个观察者的相应方法来通知它们。

观察者模式的优点包括松耦合、可扩展性好,被观察者与观察者之间的关系可以动态建立和解除。它常被用于事件驱动系统,
例如GUI界面的事件处理、发布-订阅模式等。
需要注意的是,在具体实现观察者模式时,要确保避免循环引用和过度依赖观察者之间的耦合。

提供demo版代码更容易理解

/**
 * @author zhou
 *  观察者接口
 */
interface Observer {
    void update(String data);
}

/**
 * @author zhou
 *  被观察者接口
 */
interface Observable {
    // 注册
    void registerObserver(Observer observer);
    // 注销
    void unregisterObserver(Observer observer);
    // 通知
    void notifyObservers(String data);
}

/**
 * @author zhou
 *  具体的观察者类
 */
class ConcreteObserver implements Observer {
    @Override
    public void update(String data) {
        System.out.println("Received data: " + data);
    }
}

/**
 * @author zhou
 *  具体的被观察者类
 */
class ConcreteObservable implements Observable {
    private List<Observer> observers;

    public ConcreteObservable() {
        observers = new ArrayList<>();
    }

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

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

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

    public void doSomething() {
        // 做一些操作...
        String data = "Some data";
        notifyObservers(data);
    }
}

/**
 * @author zhou
 *  客户端使用
 */
public class Main {
    public static void main(String[] args) {
        ConcreteObservable observable = new ConcreteObservable();
        Observer observer1 = new ConcreteObserver();
        Observer observer2 = new ConcreteObserver();

        // 注册观察者
        observable.registerObserver(observer1);
        observable.registerObserver(observer2);

        // 调用被观察者的方法,会通知观察者并执行相应的更新操作
        observable.doSomething();

        // 取消注册一个观察者
        observable.unregisterObserver(observer2);

        // 再次调用被观察者的方法
        observable.doSomething();
    }
}

在这个示例中,Observer 接口是观察者的接口,其中定义了 update 方法来接收被观察者传递的数据。
Observable 接口是被观察者的接口,其中包含了注册、注销和通知观察者的方法。
ConcreteObserver 类是具体的观察者类,实现了 Observer 接口的 update 方法,用于处理被观察者传递的数据。
ConcreteObservable 类是具体的被观察者类,实现了 Observable 接口的方法。
它内部维护了一个观察者列表,并在操作时调用 notifyObservers 方法通知所有注册的观察者。

在示例的 Main 类中,首先创建了一个具体的被观察者对象 observable,
然后创建了多个具体的观察者对象 (observer1 和 observer2),并将它们注册到被观察者对象中。
随后调用被观察者的 doSomething 方法,触发通知过程,观察者接收到数据并进行相应的更新操作。文章来源地址https://www.toymoban.com/news/detail-575636.html

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

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

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

相关文章

  • 设计模式—行为型模式之观察者模式

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

    2024年01月22日
    浏览(43)
  • 设计模式之观察者模式【行为型模式】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博

    2024年02月03日
    浏览(46)
  • 行为型-观察者模式(Observer Pattern)

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

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

    8.1.1概念 ​ 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,会通知所有依赖它的观察者对象,使它们都能够得到通知并且被自动更新 8.1.2场景 ​ 在我们生活中,用户可以在音乐播放平台关注多个歌手,而

    2024年01月24日
    浏览(70)
  • c#设计模式-行为型模式 之 观察者模式

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

    2024年02月14日
    浏览(36)
  • C++设计模式行为型之观察者模式

    一、 概述         观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 二、 示例代码 #include list class Subject; class Observer { public:     virtual ~Observer();     virtual void Update(Subject* theChangedSubject) =

    2024年02月14日
    浏览(43)
  • 行为型设计模式之观察者模式【设计模式系列】

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

    2024年02月15日
    浏览(42)
  • 深入理解设计模式-行为型之观察者

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

    2024年02月12日
    浏览(45)
  • 【行为型设计模式】C#设计模式之观察者模式

    参考代码:

    2024年02月13日
    浏览(50)
  • (三)行为模式:7、观察者模式(Observer Pattern)(C++示例)

    目录 1、观察者模式(Observer Pattern)含义 2、观察者模式的UML图学习 3、观察者模式的应用场景 4、观察者模式的优缺点 (1)优点: (2)缺点 5、C++实现观察者模式的实例 1、观察者模式(Observer Pattern)含义 观察者模式(Observer)定义了一种一对多的依赖关系,让多个观察者

    2024年02月09日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包