首页 > 其他分享 >TypeScript 设计模式之发布订阅者模式

TypeScript 设计模式之发布订阅者模式

时间:2024-02-07 18:31:42浏览次数:27  
标签:订阅 TypeScript string 异步 模式 发布 发布者 设计模式

订阅发布模式(Publish-Subscribe Pattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。

在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息。 发布者(或者说是主题)并不知道订阅者的存在,而订阅者也不知道发布者的存在。他们彼此唯一的关系就是在调度中心注册成为订阅者或者发布者。

当一个发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。这就实现了发布者和订阅者之间的解耦,发布者和订阅者不再直接依赖于彼此,他们可以独立地扩展自己。

在具体的实现中,可以通过消息队列、事件总线等机制来实现调度中心,不同语言和平台都有实现的库和框架,例如 Java 中的 ActiveMQ、RabbitMQ、Kafka等。

订阅发布模式有以下优点:

  1. 性能好,发布者发送消息后直接返回不需要等待消费者处理完毕。
  2. 解耦性较强,发布者和订阅者之间不存在直接依赖,满足高内聚低耦合的设计思想。
  3. 可以支持一对多、多对多的消息通信模型,提供了更加灵活的消息传递方式。
  4. 可以动态地增加或删除发布者和订阅者,扩展性较好。

发布者 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

相关文章

  • 【设计模式】建造者模式——OkHttp源码中的建造者模式
    OkHttp源码中的建造者模式之所以有必要单独拿出来讲,是因为OkHttp3.x和4.x分别用Java语言和Kotlin语言写的,所以需要做一个对比分析。在OkHttp的源码中搜索“Builder”,可以看到OkHttp的OkHttpClient、Request和Response等很多类的代码里包含名为Builder的子类,这些都是建造者模式的应......
  • 设计模式:适配器模式
    设计模式是通用的、可复用的代码设计方案,也可以说是针对某类问题的解决方案,因此,掌握好设计模式,可以帮助我们编写更健壮的代码。wiki中将设计模式分为四类,分别是:创建模式(creationalpatterns)结构模式(structuralpatterns)行为模式(behavioralpatterns)并发模式(concurrencypatt......
  • golang之设计模式
    [选项模式]packagemainimport"fmt"typeOptionFuncfunc(*DoSomethingOption)typeDoSomethingOptionstruct{aintbstringcbool}funcNewDoSomethingOption(cbool,opts...OptionFunc)*DoSomethingOption{s:=&DoSomethi......
  • 【设计模式】原型模式——其他框架源码中的原型模式
    原型模式在其他框架源码中也有广泛的应用。Retrofit众所周知Retrofit是OkHttp的扩展,因此Retrofit的Call接口也像OkHttp的Call类一样实现了原型模式。Call与原型模式有关的代码如下:publicinterfaceCall<T>extendsCloneable{//……代码省略……/***Createanew,i......
  • 设计模式(Design Pattern)
    目录设计模式(DesignPattern)面向对象设计原则创建型模式结构型模式行为型模式设计模式(DesignPattern)概念与定义是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结。设计模式(DesignPattern)是一种对于软件系统中不断重现的设计问题的解决方案进行......
  • 设计模式--建造者模式
    建造者模式(BuilderPattern)是一种对象构建设计模式,它提供了一种构建对象的最佳方式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在建造者模式中,一个导演(Director)负责组织各个部分(Builder)的构建步骤,一个抽象构建器(AbstractBuilder)定义了各个部分的构建和......
  • 设计模式简介
    设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编......
  • TS-TypeScript学习_1
    1、推断类型constnameInfo:string='Helloworld'console.log('nameInfo',nameInfo)2、定义类型interfacenameType{name:string;age:number;}constpeopleInfo:nameType={name:'libai',age:18}console.log('......
  • 设计模式--结构型模式
    设计模式--结构型模式目录设计模式--结构型模式代理模式静态代理jdk动态代理(接口实现原理)Cblib动态代理(继承原理)适配器模式类适配器模式对象适配器模式接口适配器模式装饰者模式使用场景:静态代理与装饰者模式的区别:桥接模式使用场景外观模式组合模式享元模式代理模式结构:......
  • c语言设计模式精要
    C语言是一种广泛使用的编程语言,它具有高效、灵活和可移植性等优点。在C语言的设计中,有一些重要的设计模式可以提高代码的可读性、可维护性和可扩展性。其中,最常见的设计模式包括单例模式、工厂模式和观察者模式等。单例模式用于确保一个类只有一个实例,并提供全局访问点;工厂模......