有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    从概念上讲,这应该是您对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 
        }
    }