首页 > 其他分享 >发布订阅者和观察者

发布订阅者和观察者

时间:2023-01-07 22:44:53浏览次数:31  
标签:订阅 name state 观察者 bady 发布 value

发布订阅者

// on是订阅 emit是发布
let e = {
    _callback: [],
    on(callback) {
        // 订阅一件事 当这件事发生的时候 触发对应的函数
        // 订阅 就是将函数放到数组中
        this._callback.push(callback);
    },
    emit(value) {
        this._callback.forEach(method => {
            method(value);
        });
    }
};
// 订阅
e.on(function (value) {
    console.log(value + ":张三的订阅");
});
// 订阅
e.on(function (value) {
    console.log(value + ":李四的订阅");
});
// 订阅
e.on(function (value) {
    console.log(value + ":王五的订阅");
});
// 发布
e.emit('发布')

观察者

// 被观察者 (小宝宝)
class Subject {
    constructor(name) {
        this.name = name;
        this.state = "开心"; // 被观察者的状态
        this.observers = []; // 存放观察者
    }
    // 需要将观察者放到自己的身上
    attach(ther) {
        this.observers.push(ther);
    }
    // 更新被观察者的状态
    setState(state) {
        this.state = state;
        this.observers.forEach(ther => {
            ther.update(this);
        });
    }
}
// 观察者
class Observer {
    constructor(name) {
        this.name = name;
    }
    // 等会被观察者的状态发生变化会调用这个方法
    update(subject) {
        console.log(this.name + ":" + subject.name + "当前状态是" + subject.state);
    }
}
let bady = new Subject("小宝宝");
let father = new Observer("爸爸");
let mother = new Observer("妈妈");
bady.attach(father);
bady.attach(mother);
bady.setState("不开心");
bady.setState("饿了");

 

标签:订阅,name,state,观察者,bady,发布,value
From: https://www.cnblogs.com/z-bky/p/17033758.html

相关文章