日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )

發布時間:2025/6/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、發布-訂閱模式
  • 二、代碼實現發布-訂閱模式
    • 1、訂閱者接口
    • 2、訂閱者實現類
    • 3、發布者
    • 4、調度中心
    • 5、客戶端





一、發布-訂閱模式



發布訂閱模式 :

  • 發布者 Publisher : 狀態改變時 , 向 消息中心 發送事件 ;
  • 訂閱者 Subscriber :消息中心 訂閱自己關心的事件 ;
  • 消息中心 : 負責維護一個 消息隊列 , 根據 消息類型 將 消息 轉發給 對應的 訂閱者 ;

下面按照該結構實現一個簡單的 發布-訂閱模式 ;





二、代碼實現發布-訂閱模式




1、訂閱者接口


/*** 訂閱者*/ public interface Subscriber {/*** 處理事件* @param msg 接收到的事件*/void onEvent(String msg); }

2、訂閱者實現類


訂閱者實現類 1 :

public class Subscriber1 implements Subscriber {@Overridepublic void onEvent(String msg) {System.out.println("Subscriber1 訂閱者收到消息 " + msg);} }

訂閱者實現類 2 :

public class Subscriber2 implements Subscriber {@Overridepublic void onEvent(String msg) {System.out.println("Subscriber2 訂閱者收到消息 " + msg);} }

3、發布者


/*** 發布者*/ public class Publisher {/*** 發布消息* @param msg 要發布的消息*/public void post(String msg) {Dispatcher.getInstance().post(msg);} }

4、調度中心


調度中心提供如下功能 :

  • 訂閱者隊列 : 維護一個訂閱者集合 , 收到消息后 , 需要將數據發送給各個訂閱者 ;
  • 注冊訂閱者 : 可以添加訂閱者到集合中 ;
  • 刪除訂閱者 : 將訂閱者從集合中刪除 ;
import java.util.ArrayList; import java.util.List;/*** 調度中心*/ public class Dispatcher {/*** 維護訂閱者集合*/private List<Subscriber> subscribers;/*** 單例模式實例對象*/private static Dispatcher instance;private Dispatcher() {this.subscribers = new ArrayList<>();}public static Dispatcher getInstance() {if (instance == null) {instance = new Dispatcher();}return instance;}/*** 注冊訂閱者* @param subscriber*/public void register(Subscriber subscriber) {subscribers.add(subscriber);}/*** 取消訂閱者* @param subscriber*/public void unregister(Subscriber subscriber) {subscribers.remove(subscriber);}/*** 發送消息* 將接收到的事件發送給訂閱者* @param msg*/public void post(String msg) {for (int i = 0; i < subscribers.size(); i++) {subscribers.get(i).onEvent(msg);}} }

5、客戶端


public class Client {public static void main(String[] args) {// 創建訂閱者Subscriber1 subscriber1 = new Subscriber1();Subscriber2 subscriber2 = new Subscriber2();// 注冊訂閱者Dispatcher.getInstance().register(subscriber1);Dispatcher.getInstance().register(subscriber2);// 創建發布者Publisher publisher = new Publisher();// 發布消息publisher.post("Hello");} }

執行結果 :

總結

以上是生活随笔為你收集整理的【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。