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

RxJava:如何订阅不同类的事件,java,observable,rx-java,rx-java2,Java,Observable,Rx Java,Rx Java2,我有一个关于如何从概念上创建观察者并将其链接到另一个类的问题:我目前有一个名为Simulation的类,它应该创建TransactionCreated对象并将其作为事件发布。另一个名为TransactionReceiver的类应该是Simulation类发布的每个事件的观察者,并与它们一起工作。 main方法包含在Simulation类中,首先在静态上下文中创建一个事件并发布它。我的问题是,我应该如何连接作为观察者的TransactionReceiver,并让它通过在方法中接收这些事件来订阅这些

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

你的应用程序应该只有一个
main
方法

从概念上讲,这应该是您进行
模拟
TransactionReceiver
的初始设置的地方,因此您可以将其移动到单独的类中,以帮助您可视化事情应该如何工作。您可以尝试以下方法:

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

这将帮助您管理在整个应用程序中需要使用的类的依赖关系

因此,您将得到一个更简单的
应用程序
——它只需设置DI框架,然后您就可以随心所欲地使用这些类

更新:

如果要在两个不同的类之间通信,则需要使用以下方法:

class Simulation {
    public Observable<TransactionCreated> simulate() {
        // use PublishSubject or whatever 
    }
}
类模拟{
公共可观测模拟{
//使用PublishSubject或任何东西
}
}

谢谢,我已经认为它必须在结构上这样连接,但我不确定。这方面唯一的问题是RxJava如何连接到它,因为就我而言,您不能订阅类。这是我的问题,因为我正在将数据输入到一个方法(模拟中的createTransaction)中,并且它在该方法中返回一个可观察的值。我该如何发布它,以便接收者得到它?@PWiese我更新了我的答案-您必须为对象编写方法,以便它们彼此通信