• 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)
    

      

    观察者模式应用场景

  • 相关阅读:
    Centos7
    appium+python常见报错(appium方面)
    python标准库之datetime
    python异常捕获
    python写入文件和读取文件
    python标准库之collections
    python导入类
    python3+robotframework+pycharm安装运行
    python 继承/父类和子类的关系
    python_类
  • 原文地址:https://www.cnblogs.com/hpx2020/p/10718716.html
Copyright © 2020-2023  润新知