RxJava:如何订阅不同的事件 class

RxJava: How to subscribe to the events of a different class

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

您的应用应该只有一个 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。

这将帮助您管理需要在整个应用程序中使用的 classes 的依赖项。

所以你最终会得到一个更简单的 Application - 它只会设置 DI 框架,然后你可以按你想要的方式使用 classes。

更新:

如果你想在两个不同的class之间进行通信,你需要使用方法:

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