簡體   English   中英

RxJava:如何訂閱不同 class 的事件

[英]RxJava: How to subscribe to the events of a different class

我有一個關於如何在概念上創建一個觀察者並將其鏈接到另一個 class 的問題:我目前有一個名為Simulation的 class 應該創建TransactionCreated對象並將它們作為事件發布。 另一個名為TransactionReceiver的 class 應該是Simulation class 發布的每個事件的觀察者並與它們一起工作。 主要方法包含在Simulation class 中,首先在 static 上下文中創建一個事件並發布它,它可以工作。 我的問題是我應該如何將TransactionReceiver作為觀察者連接並讓它通過在方法中接收這些事件並使用這些接收到的對象來訂閱這些事件? 我是否需要創建另一個包含主要方法的 class 並創建一個SimulationTransactionReceiver object,然后將它們作為 Observable 和 Observer 鏈接在一起? 那會是什么樣子? 如果我用幾個不同的類擴展該系統,它們是否都必須通過一個連接觀察者和觀察者的 class 連接在一起?

您的應用程序應該只有一個main方法。

從概念上講,這應該是您對SimulationTransactionReceiver進行初始設置的地方,因此也許您可以將其移動到單獨的 class 以幫助您直觀地了解事情應該如何工作。 您可以嘗試以下方法:

class Application {
   private Simulation simulation;
   private TransactionReceiver transactionReceiver;

   public Application() {
       simulation = new Simulation(/* params here*/);
       transactionReceiver = new TransactionReceiver(/*params here*/);
   }

   public void go() {
       simulation.simulate().subscribe(transactionCreated -> transactionReceiver.doSomething(transactionCreated);
   }

   public static final main(String[] args) {
       Application application = new Application();  
       application.go();
   } 
}

最終,當你變得更流利時,你可以考慮添加一個依賴注入框架,比如 Guice 或 Dagger。

這將幫助您管理需要在整個應用程序中使用的類的依賴關系。

所以你最終會得到一個更簡單的Application ——它只會設置 DI 框架,然后你可以使用你想要的類。

更新:

如果要在兩個不同的類之間進行通信,則需要使用方法:

class Simulation {
    public Observable<TransactionCreated> simulate() {
        // use PublishSubject or whatever 
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM