zoukankan      html  css  js  c++  java
  • js设计模式——3.观察者模式

    js设计模式——观察者模式

    /*js设计模式——.观察者模式*/
    
    // 主题,保存状态,状态变化之后触发所有观察者对象
    class Subject {
        constructor() {
            this.state = 0;
            this.observers = [];
        }
    
        getState() {
            return this.state;
        }
        
        setState(state) {
            this.state = state;
            this.notifyAllObservers();
        }
    
        // notifyAllObservers 用于触发每个观察者的更新
        notifyAllObservers() {
            this.observers.forEach(observer => {
                observer.update();
            });
        }
    
        // attach 把每个存放所有观察者数组中
        attach(observer) {
            this.observers.push(observer);
        }
    }
    
    // 观察者
    class Observer {
        constructor(name, subject) {
            this.name = name;
            this.subject = subject;
            this.subject.attach(this);
        }
    
        // update触发更新
        update(observer) {
            console.log(`${this.name} update, state:${this.subject.getState()}`);
        }
    }
    
    // 测试
    let s = new Subject();
    let o1 = new Observer('o1', s)   // 打印结果 o1 update, state:1
    let o2 = new Observer('o2', s)   // 打印结果 o2 update, state:1
    let o3 = new Observer('o3', s)   // 打印结果 o3 update, state:1
    
    // 各个观察者各自依次运行
    s.setState(1)
    s.setState(2)
    s.setState(3)
    

      

    观察者模式应用场景

  • 相关阅读:
    kakfa 入门
    Spring Boot maven构建——阿里云Maven仓库地址
    MongoDB入门一
    MongoDB入门
    mybatis 一对一、一对多、多对一、多对多
    springboot集成druid数据源并且监控
    java 过滤表情符号
    Mybatis框架
    表单(一)
    HTML标签(二)
  • 原文地址:https://www.cnblogs.com/hpx2020/p/10718716.html
Copyright © 2011-2022 走看看