订阅发布模式(Publish-Subscribe Pattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。
在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息。 发布者(或者说是主题)并不知道订阅者的存在,而订阅者也不知道发布者的存在。他们彼此唯一的关系就是在调度中心注册成为订阅者或者发布者。
当一个发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。这就实现了发布者和订阅者之间的解耦,发布者和订阅者不再直接依赖于彼此,他们可以独立地扩展自己。
在具体的实现中,可以通过消息队列、事件总线等机制来实现调度中心,不同语言和平台都有实现的库和框架,例如 Java 中的 ActiveMQ、RabbitMQ、Kafka等。
订阅发布模式有以下优点:
- 性能好,发布者发送消息后直接返回不需要等待消费者处理完毕。
- 解耦性较强,发布者和订阅者之间不存在直接依赖,满足高内聚低耦合的设计思想。
- 可以支持一对多、多对多的消息通信模型,提供了更加灵活的消息传递方式。
- 可以动态地增加或删除发布者和订阅者,扩展性较好。
发布者 Publisher
- 定义维护观察者的列表 subscribers 【按照最小暴露原则,这个部分不应该暴露出来,但是为了大家理解清楚,这里我们选择暴露出来】、
- 进行注册和注销观察者的两个方法 subscribe/unsubscribe 、
- 最后定义一个广播消息的函数 publish 。
interface Observer {
revive(data: { type: string; name: string; msg: string }): void
}
interface Publisher {
subscribers: Observer[]
subscribe(op: Observer): void
unsubscribe(op: Observer): void
publish(data: any): void
}
我们先来实现一下订阅者,也就是我们自己
我们自己 为了避免误伤,建立了一个白名单 whiteList 名单里面的都是授权的人群,比如刘德华要是唱跳rap了也不能起诉,得给华哥打钱感谢宣传。定义了一个发送律师函的方法 postPaper。
class IKUN implements Observer {
// IKUN 授权的白名单
private whiteList: string[] = []
constructor() {
this.whiteList = ["LiuDeHua"]
}
revive(action: { type: string; name: string; msg: string }): void {
const { type, msg, name } = action
// 坤坤 主要针对的都是男性的小黑子,女生一般都
标签:订阅,TypeScript,string,异步,模式,发布,发布者,设计模式
From: https://blog.51cto.com/u_11365839/9639530