【发布时间】:2021-05-16 15:01:17
【问题描述】:
我知道单例模式。
我需要在两个类实例之间实现双向通信,但实例化不是由我完成的(而是由一些第 3 方库完成的)。
此第 3 方库还要求公共默认构造函数必须以这种形式提供:
public MyClassA(Context ctx);
这个第 3 方库将初始化我的两个类 MyClassA 和 MyClassB。
在它们之间进行通信(调用彼此的函数)的最有效/推荐的技术是什么?
因此,第 3 方库使用上面显示的构造函数实例化 MyClassA。它还实例化MyClassB(与MyClassA 具有相同的签名)。
然后在这个第 3 方的一些事件(它调用 MyClassA 的名为 onEvent0 的实现方法)我需要调用 MyClassB 的实例的 doSomeAction 函数:
3rdpartylib::notify -> myclassa::onEvent0() -> myclassb::doSomeAction
我知道当第 3 方实例化我的类时我可以存储一个实例,但如果我们考虑到具有一些不错的 Handler 和 ServiceConnection 范例的 Android 平台,这是推荐的方式吗?
【问题讨论】:
-
“那么在这个第 3 方的一些事件(调用 MyClassA 的名为 onEvent0 的实现方法)中,我需要调用 MyClassB 的实例的 doSomeAction 函数”——为什么?为什么
MyClassB不能持有其他对象,而您的MyClassA对象可以调用doSomeAction()?例如,MyClassB(可能还有MyClassA)可以是其他执行实际工作的对象的薄包装,其中那些其他对象是通过依赖反转框架(Dagger/Hilt、Kotlin 中的 Koin 等)获得的。在连接这些其他对象时,您将拥有更大的灵活性。