首页 > 解决方案 > RxJava:如何订阅不同类的事件

问题描述

我有一个关于如何在概念上创建 Observer 并将其链接到另一个类的问题:我目前有一个名为的类Simulation,它应该创建TransactionCreated对象并将它们作为事件发布。另一个名为TransactionReceiver的类应该是Simulation该类发布并与它们一起工作的每个事件的观察者。main 方法包含在Simulation类中,首先在静态上下文中创建一个事件并发布它,它可以工作。我的问题是我应该如何连接TransactionReceiver作为观察者并让它通过在方法中接收这些事件并使用这些接收到的对象来订阅这些事件?我是否需要创建另一个包含主要方法的类并创建一个SimulationTransactionReceiver然后作为 Observable 和 Observer 链接在一起的对象?那会是什么样子?如果我用几个不同的类扩展该系统,它们是否都必须通过一个连接观察者和可观察者的类连接在一起?

标签: javaobservablerx-javarx-java2

解决方案


您的应用程序应该只有一种main方法。

从概念上讲,这应该是你对 and 进行初始设置的地方SimulationTransactionReceiver所以也许你可以将它移到一个单独的类中,以帮助你想象事情应该如何工作。您可以尝试以下方法:

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 
    }
}

推荐阅读