Kotlin设计模式:观察者模式
发表于更新于
广州
kotlin与java基本使用方法一样,不过写法更简洁。
观察者,感觉就是多个事件源与一个订阅者,订阅者订阅多个事件源,当订阅者接收数据时候,所有的事件源都触发并更新数据。
换成观察者,就是,一个目标对象状态改变,其它观察它的对象都收到通知,并改变,像广播一样。
用kotlin代码实现如下:之前在菜鸟写过笔记,有一处错误,被观察者后面的 订阅者 -》修改为 被订阅者。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
interface Observer { fun <T : Any?> update(msg: T) }
class Ob1(private val id: Int = 0) : Observer { override fun <T> update(msg: T) { println("接收消息,观察者$id:$msg") } }
class Ob2 : Observer by Ob1(2) class Ob3 : Observer by Ob1(3)
class Subject {
private var observers = ArrayList<Observer>() fun attach(ob: Observer) { observers.add(ob) } fun <T : Any?> setMsg(msg: T) { this.notify(msg) } private fun <T : Any?> notify(msg: T) { for (iOb in this.observers) { iOb.update(msg) } } }
fun main() {
val sub = Subject().apply { attach(Ob1()) attach(Ob2()) attach(Ob3()) } with(sub){ setMsg(123) setMsg("hello world") setMsg('A') setMsg(null) } }
|
输出:
❄️2winter
ReactNative FullStack Developer
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ❄️2winter!