【发布时间】:2019-07-01 00:44:24
【问题描述】:
情况是这样,我正在为客户构建一个 SDK,以通知客户三种不同的触摸状态:
触摸对象
物体接触到外面
对象触摸退出
我尝试使用观察者设计模式,其中 Observable 向所有作为客户的观察者发送更新。但是也有一些问题。
https://stonesoupprogramming.com/2017/10/28/observer-pattern-in-kotlin/
遵循此设计指南可以看到,为了让客户订阅,他们需要编写以下代码:
val bob = Bob()
bob.addObserver(Customer1())
class Customer1: Observer{
val name = "Customer1"
override fun update(o: Observable?, arg: Any?) {
// Do your logic here
}
}
这意味着客户在集成 SDK 时需要同时声明一个名为 Customer1 的 Class 文件和扩展的 Observer。
有没有办法简化让客户注册为我们 SDK 的 Observable 的观察者的过程?我不确定要实现哪种抽象。
【问题讨论】:
-
我不知道 Kotlin,但该模式的重点是它使您能够注册任意数量和类型的观察者。任何 Observer 都可以使用任何 Observable 进行更新。要使用您的 API,客户端需要处理它。这并不意味着他们一定需要
Customer类。这只是意味着他们需要一个知道如何处理您传递的数据 (arg) 的观察者。如在您的链接中,您甚至可以检查类型并根据需要使用一个update处理多个 Observable 类型。 -
感谢@ChiefTwoPencils 我认为更简单的方法是实现event listener,因为它删除了我的观察者示例中看到的所有以前的样板代码
-
你可以试试
PublishSubject -
为什么不想使用 LiveData?
-
@EdgarKhimich 我认为 LiveData 用于观察 Activity UI 的变化,而在这种情况下没有 UI。
标签: java android design-patterns kotlin