5 # 观察者模式

简介: 5 # 观察者模式

观察者模式

  1. 有观察者,肯定也有被观察者
  2. 观察者需要放到被观察者中
  3. 被观察者的状态发生变化需要通知观察者
  4. 内部也是基于发布订阅模式去收集观察者

例子:比如要是实现我发了博客需通知其他小伙伴,下面实现一个简单的观察者模式:

// 被观察者
class Subject {
    constructor(name) {
        this.name = name;
        // 观察者列表
        this.observers = [];
    }
    // 添加观察者
    addObserver(o) {
        this.observers.push(o);
    }
    // 移除观察者
    removeObserver(o) {
        let index = this.observers.indexOf(o);
        if (index > -1) {
            this.observers.splice(index, 1);
        }
    }
    // 通知所有观察者
    notify() {
        this.observers.forEach((o) => o.updade(this));
    }
}
// 观察者
class Observer {
    constructor(name) {
        this.name = name;
    }
    updade(subject) {
        console.log(`【${subject.name}】发布了博客,当前【${this.name}】被通知了`);
    }
}
let subject = new Subject("凯小默");
let observer1 = new Observer("小明");
let observer2 = new Observer("小红");
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notify();
subject.removeObserver(observer1);
subject.notify();

目录
相关文章
|
5天前
|
设计模式 监控 C#
观察者模式
观察者模式是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更新。该模式主要用于实现发布-订阅机制。核心角色包括主题(Subject)、观察者(Observer)、具体主题(Concrete Subject)和具体观察者(Concrete Observer)。优点包括低耦合、动态添加观察者和自动更新,但也有可能引起过多更新、不适合同步通知和可能造成内存泄漏等缺点。适用于气象站数据更新、股票价格监控和用户界面组件更新等场景。
19 4
|
7月前
|
C++
【C++】—— 观察者模式
【C++】—— 观察者模式
|
7月前
|
设计模式 JavaScript 开发者
详细讲解什么是观察者模式
详细讲解什么是观察者模式
|
关系型数据库 API
观察者模式解读
观察者模式解读
|
7月前
|
设计模式 Java
【观察者模式】 ——每天一点小知识
【观察者模式】 ——每天一点小知识
|
5月前
|
JSON Java fastjson
Spring Boot返回Json数据及数据封装
本文详细介绍了如何在Spring Boot项目中处理JSON数据的传输 Spring Boot默认使用Jackson作为JSON处理器,并通过`spring-boot-starter-web`依赖自动包含相关组件。文章还展示了如何配置Jackson处理null值,使其转换为空字符串。此外,文章比较了Jackson和FastJson的特点,并提供了FastJson的配置示例,展示了如何处理null值以适应不同应用场景。
|
XML 设计模式 Java
观察者模式(下)
观察者模式(下)
66 0
|
设计模式
观察者模式(上)
观察者模式(上)
87 0
|
设计模式
我学会了,观察者模式
观察者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
133 0
我学会了,观察者模式
|
存储
深入剖析观察者模式
深入剖析观察者模式
155 0