1. 程式人生 > >釋出訂閱模式簡單實現

釋出訂閱模式簡單實現

程式碼

export default class Oberver {
  // 定義一個事件容器
  event = {}

  subscribe (type, fn) {
    // 訊息型別不存在
    if (typeof this.event[type] === 'undefined') {
      this.event[type] = [fn]
    // 存在,將fn推入事件佇列
    } else {
      this.event[type].push(fn)
    }
  }

  publish (type, args = {}) {
    // 訊息型別沒人訂閱
if (!this.event[type]) return let i = 0 let len = this.event[type].length for (; i < len; i++) { // 依次執行事件佇列(釋出) this.event[type][i].call(this, {type, args}) } } }

測試

const ober = new Oberver()
ober.subscribe('time', function (e) {
  console.log(`事件: ${e.type}
`) console.log(`訊息: ${e.args.message}`) }) ober.subscribe('js', function (e) { console.log(`事件: ${e.type}`) console.log(`訊息: ${e.args.message}`) }) ober.publish('time', {message: '我訂閱了time'})

效果
這裡寫圖片描述

相關推薦

釋出訂閱模式簡單實現

程式碼 export default class Oberver { // 定義一個事件容器 event = {} subscribe (type, fn) { // 訊息型

zeromq釋出-訂閱模式簡單使用

zeromq作為網路通訊庫,是支援釋出、訂閱機制的,但是又與MQTT等釋出、訂閱概念有所不同。 由於ZMQ通訊是基於CS模型的,沒有服務程式做中轉,也就意味著訂閱端作服務端和釋出端作服務端是不同的。 如下圖所示,每個框表示一個程序,zmq釋出、訂閱機制有如下性質: 服務程式作釋出者 只能

基於spring-redis釋出訂閱模式實現

redis配置:  Java程式碼  <?xml version="1.0" encoding="UTF-8"?>   <beans xmlns="http://www.springframework.org/schema/beans"       

學習筆記-js釋出/訂閱模式簡單實現

Publish/Subscribe(釋出/訂閱模式): 在《Javascript設計模式》一書中,這兩種模式還是有些區別的。書中原話如下: * Observer模式要求希望接收到主題通知者的觀察者必須訂閱內容改變的事件 * Subscribe/Publis

js 實現釋出訂閱模式

/* Pubsub */ function Pubsub(){   //存放事件和對應的處理方法   this.handles = {}; } Pubsub.prototype = {   //傳入事件型別type和事件處理handle   on: function (type, handle) {     

RabbitMQ釋出訂閱模式實現

 pom檔案: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mav

通過釋出訂閱模式實現的事件委託

關於這篇文章的背景 之前瞭解到的事件代理不多,就像是一個dom將事件委託給另一個dom,又叫事件委託。後來做了個題目,要實現一個類似jquery的事件委託方法,然後認真的瞭解了一下。然後專注於實現,其實並沒有去看jquery的原始碼,hhh。 釋出訂閱模式大概是目前前端框架使用的一種最常見的設計模式了,而

springboot整合redis實現訊息釋出訂閱模式-雙通道(跨多伺服器)

  基礎配置參考https://blog.csdn.net/llll234/article/details/80966952   查看了基礎配置那麼會遇到一下幾個問題: 1.實際應用中可能會訂閱多個通道,而一下這種寫法不太通用container.addMessageListener

redis之mq實現釋出訂閱模式

示例程式碼-github 概述 Redis不僅可作為快取伺服器,還可用作訊息佇列,本示例演示如何使用redis實現釋出/訂閱訊息佇列。 在Redis中,釋出者沒有將訊息傳送給特定訂閱者的程式。相反,釋出的訊息被描述為通道,而不知道(如果有的話)可能有哪些訂閱者。 訂閱者表示對一個或多個主題感興趣,只

WPF中的MVVM模式簡單實現

hand bar alt 入門 right 一個 suggest too center 前言:在之前實現WPF程序時,我們可能會把所有的後臺邏輯都放在視圖的後臺文件中,這樣的實現方式的好處更直觀,方便,對於一些小的應用程序這樣做當然沒什麽問題,但是對於復雜的應用程序這樣寫的

vue非父子元件間的傳值 Bus/匯流排機制/釋出訂閱模式/觀察者模式

Bus/匯流排機制/釋出訂閱模式/觀察者模式 我們需要將一個元件的子元件的資料傳遞給另一個元件的子元件 ① 將Vue的例項賦值給Vue.prototype.bus,這樣只要我們之後呼叫new Vue()或者建立元件的時候,每一個元件上都會有Bus這個屬性,因為每一個元件或者Vue這個例項

設計模式之代理模式簡單實現

簡介 代理模式通常用於達到對原有系統功能進行擴充的目的,比如:你剛接手一個別人沒有完成的專案,這時你不想動別人原來的程式碼,還需要新增新功能。這時代理模式,這時代理模式會很好的幫我們解決問題 代理模式一般分為靜態代理,動態代理兩種 靜態代理 靜態代理一般是

SpringBoot2.0之整合ActiveMQ(釋出訂閱模式

釋出訂閱模式與前面的點對點模式很類似,簡直一毛一樣   注意:釋出訂閱模式 先啟動消費者 公用pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XML

vue非父子元件傳值之釋出訂閱模式

vue非父子元件傳值之釋出訂閱模式 目前瞭解的元件傳值的幾種方式 props 再熟悉不過了 vuex 也比較常用 evenbus 釋出訂閱 主要說一下發布訂閱 Vue.prototype.bus = new Vue();

RabbitMQ釋出訂閱模式

這個可能是訊息佇列中最重要的隊列了,其他的都是在它的基礎上進行了擴充套件。功能實現:一個生產者傳送訊息,多個消費者獲取訊息(同樣的訊息),包括一個生產者,一個交換機,多個佇列,多個消費者。 思路解讀(重點理解): (1)一個生產者,多個消費者(2)每一個消費者都有自己的一個佇列(3)生產者

結合 Vue 原始碼談談釋出-訂閱模式

最近的工作學習中接觸到了釋出-訂閱模式。該思想程式設計中的應用也是很廣泛的, 例如在 Vue中也大量使用了該設計模式,所以會結合Vue的原始碼和大家談談自己粗淺的理解. 釋出訂閱模式主要包含哪些內容呢? 釋出函式,釋出的時候執行相應的回撥 訂閱函式,新增訂閱者,傳入釋出時要執行的

23種設計模式 之 Observer模式釋出-訂閱模式) C語言

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

rabbitmq5-釋出訂閱模式

前面的幾篇博文中講解的是兩個簡單的模式,並沒有提到exchange互動及這個東西,那麼是時候該引入完整的模式了,我們將引入exchange,同時介紹exchange的幾種工作的模式 一、釋出訂閱模式概念及應用場景: 1、概念 釋出訂閱模式使用的是“fanout”扇出

Guava - EventBus(事件匯流排) - 事件釋出訂閱模式(一對多、同一個JVM下解耦)

原文:https://www.cnblogs.com/whitewolf/p/4132840.html Guava在guava-libraries中為我們提供了事件匯流排EventBus庫,它是事件釋出訂閱模式的實現,讓我們能在領域驅動設計(DDD)中以事件的弱引用本質對我們的模組和領域邊界很好

JavaScript 釋出/訂閱模式

釋出訂閱模式可以理解為: 使用者關注一個了微信公眾號(訂閱),當公眾號有內容更新時會推送(釋出)給所有關注該公眾號的使用者。 廢話不多說直接上程式碼(此demo僅幫助理解發布/訂閱模式): let Observable = { observers:[], //