发布订阅模式: 订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。
比如很多人买了同一个股票,同花顺微信有触发预警发消息通知功能,如果很多人都买(订阅了)相同的股票,那么都会收到通知,下面是简单实现方法
//创建订阅事件
let event = {
//创建一个数组用来放订阅的消息
clientList: [],
//监听函数
listen(key, fn) {
if (!this.clientList[key]) {
this.clientList[key] = [];
}
this.clientList[key].push(fn); // 订阅的消息添加进缓存列表
},
//触发函数
trigger(type, money) {
if (!this.clientList[type] || this.clientList[type].length === 0) {
// 如果没有绑定对应的消息直接返回
return;
}
this.clientList[type].forEach((fn) => {
fn.apply(this, [money]);
});
},
};
// 创建股票事件
let stockEvent = event;
// 小明订阅信息
stockEvent.listen("杭州银行", (price) => {
console.log("小明,现在杭州银行股票价格是" + price);
});
// 小光订阅信息
stockEvent.listen("九安医疗", (price) => {
console.log("小光,现在九安医疗股票价格是" + price);
});
// 小红订阅信息
stockEvent.listen("九安医疗", (price) => {
console.log("小红,现在九安医疗股票价格是" + price);
});
// 小吴订阅信息
stockEvent.listen("东方财富", (price) => {
console.log("小红,现在东方财富股票价格是" + price);
});
stockEvent.trigger("杭州银行", 11.73);
stockEvent.trigger("九安医疗", 88.88);
stockEvent.trigger("中国平安", 50.0);