java - RxJava:如何订阅不同类的事件
问题描述
我有一个关于如何在概念上创建 Observer 并将其链接到另一个类的问题:我目前有一个名为的类Simulation
,它应该创建TransactionCreated
对象并将它们作为事件发布。另一个名为TransactionReceiver
的类应该是Simulation
该类发布并与它们一起工作的每个事件的观察者。main 方法包含在Simulation
类中,首先在静态上下文中创建一个事件并发布它,它可以工作。我的问题是我应该如何连接TransactionReceiver
作为观察者并让它通过在方法中接收这些事件并使用这些接收到的对象来订阅这些事件?我是否需要创建另一个包含主要方法的类并创建一个Simulation
和TransactionReceiver
然后作为 Observable 和 Observer 链接在一起的对象?那会是什么样子?如果我用几个不同的类扩展该系统,它们是否都必须通过一个连接观察者和可观察者的类连接在一起?
解决方案
您的应用程序应该只有一种main
方法。
从概念上讲,这应该是你对 and 进行初始设置的地方Simulation
,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。
这将帮助您管理需要在整个应用程序中使用的类的依赖关系。
所以你最终会得到一个更简单的Application
结果——它只需要设置 DI 框架,然后你就可以使用你想要的类。
更新:
如果要在两个不同的类之间进行通信,则需要使用方法:
class Simulation {
public Observable<TransactionCreated> simulate() {
// use PublishSubject or whatever
}
}
推荐阅读
- pandas - 如何将多行和多列插入数据框
- objective-c - 如何覆盖 NSMapTable 的描述?
- vb.net - 如何在 VB 的结构中声明结构数组?
- ruby - Travis builds on Ruby 2.6.3 have bundler version mismatch
- dns - 为什么我的浏览器解析 DNS 与 dig 不同?
- java - 如何使用 If else 语句 java 到 auth 过滤器
- typescript - 为什么不能急切地解决这个带有通用 keyof 的条件?
- google-apps-script - 使用自定义侧边栏,取选定范围并输出线性比例,并在开始值和结束值之间舍入
- visual-studio - 自从我升级到 VS2019 后,我的构建代理没有接收任何 C# 任务
- css - Flex 和布局(React Native)