📅  最后修改于: 2023-12-03 15:12:27.183000             🧑  作者: Mango
道具反应是编程中常见的设计模式之一,也称为“观察者模式”或“发布-订阅模式”。道具反应建立在事件通知的基础上,当一个对象发生状态改变时,所有订阅这个对象的观察者都会接收到通知并更新自己的状态或行为。
道具反应的核心原理就是事件的监听和触发。在 JavaScript 中,我们可以通过监听对象的属性值的改变来触发事件,然后通过事件通知,通知所有的观察者进行相应的操作。
基本的流程如下:
class Subject {
constructor() {
this.observers = [];
this.property = '';
}
setProperty(value) {
this.property = value;
this.notify();
}
getProperty() {
return this.property;
}
subscribe(observer) {
this.observers.push(observer);
}
unsubscribe(observer) {
this.observers = this.observers.filter(obs => observer !== obs);
}
notify() {
this.observers.forEach(observer => observer.handle(this));
}
}
class Observer {
handle(subject) {
console.log(`${subject.getProperty()} has been updated.`);
}
}
const subject = new Subject();
const observer = new Observer();
subject.subscribe(observer);
subject.setProperty('new value'); // logs 'new value has been updated.'
以上代码定义了一个 Subject 类和 Observer 类,Subject 类中包含了 setProperty()、getProperty()、subscribe()、unsubscribe()、notify() 方法,其中 notify() 方法会调用 Observer 类中的 handle() 方法内容。在 main 函数中,我们实例化了一个 Subject 对象和一个 Observer 对象,并将 Observer 对象注册到 Subject 对象中。
使用 setProperty() 方法来更新 Subject 对象的 property 值,在 property 值发生变化时,会触发 Subject 对象的 notify() 方法,从而调用 Observer 对象的 handle() 方法。
道具反应模式建立了一种对象之间解耦的联系方式,目标对象与观察者对象完全独立,彼此之间没有任何依赖关系。通过这种方式,我们可以让应用程序更加灵活、可维护和可扩展。