设计模式【行为型】-- 观察者模式

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

观察者模式(Observer Pattern)

观察者模式(Observer Pattern)是一种行为型设计模式,用于在对象之间建立一种一对多的依赖关系,使得当一个对象状态改变时,其相关依赖对象都能得到通知并自动更新。

概念:

  1. 主题(Subject):也称为被观察者,它维护一个观察者列表,并提供添加、删除和通知观察者的方法。
  2. 观察者(Observer):它定义了一个接口,当主题状态改变时会被通知,并执行相应的更新操作。
  3. 具体主题(ConcreteSubject):实现主题接口,当状态发生变化时,通知其注册的观察者。
  4. 具体观察者(ConcreteObserver):实现观察者接口,定义在接收到通知时所进行的更新操作。

优点:

  1. 解耦:观察者模式能够让主题与观察者之间解耦,使得它们可以独立地进行扩展和变化。
  2. 易扩展:可以灵活地增加新的观察者,无需修改主题代码。
  3. 通知机制:当对象之间存在一对多关系时,观察者模式能够提供一种简单的通知机制,保证相关对象及时更新。

缺点:

  1. 过多的更新:如果观察者较多且更新操作较复杂,可能导致性能问题。
  2. 循环依赖:观察者和主题之间的循环依赖需谨慎处理,避免导致循环调用。

使用场景:

  1. 当一个对象的改变需要同时改变其他对象,并且不知道有多少对象需要改变时,可以考虑使用观察者模式。
  2. 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中可以使用观察者模式实现解耦。

示例案例:新闻发布订阅系统

假设我们有一个新闻发布订阅系统,包含以下角色:

  • 主题(Subject):新闻发布者,维护一个订阅者列表,并提供添加、删除和通知订阅者的方法。
  • 观察者(Observer):新闻订阅者,定义了接收新闻更新的方法。
  • 具体主题(ConcreteSubject):具体的新闻发布者,继承主题接口,实现添加、删除和通知订阅者的方法。
  • 具体观察者(ConcreteObserver):具体的新闻订阅者,实现观察者接口,定义接收新闻更新的方法。
// 主题接口
interface Subject {
    void addObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String news);
}

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

// 具体主题
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void addObserver(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);
        }
    }
}

// 具体观察者
class ConcreteObserver implements Observer {
    private String name;

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

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

// 测试代码
public class ObserverPatternExample {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        
        Observer observer1 = new ConcreteObserver("Subscriber 1");
        Observer observer2 = new ConcreteObserver("Subscriber 2");
        
        subject.addObserver(observer1);
        subject.addObserver(observer2);
        
        subject.notifyObservers("Breaking News: COVID-19 Update!");
        
        subject.removeObserver(observer2);
        
        subject.notifyObservers("Sports News: Team A wins the championship!");
    }
}

在上面的例子中,新闻发布者和订阅者之间的关系被解耦,当新闻发布者发布新闻时,所有订阅者都会收到通知并进行相应的更新操作。文章来源地址https://www.toymoban.com/news/detail-607008.html

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

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

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

相关文章

  • 行为型设计模式之观察者模式【设计模式系列】

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

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

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

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

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

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

    参考代码:

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

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

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

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

    2024年02月12日
    浏览(50)
  • 【设计模式】观察者模式

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

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

    观察者模式可以分为观察者和被观察者,观察者通过注册到一个被观察者中,也可视为订阅,当被观察者的数据发生改变时,会通知到观察者,观察者可以据此做出反应。 可以类比订阅报纸,报社就是被观察者,订阅者就是观察者,订阅者通过订阅报纸与报社建立联系,而报

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

    观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者

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

    1,概念         属于行为模式的一种,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一对象主题对象,这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 在观察者模式中有如下角色: Subject:抽象主题(抽象被观察者),

    2024年02月15日
    浏览(65)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包