Kotlin设计模式:观察者模式

本文探讨了Kotlin中的观察者模式,强调其作为事件发布机制的角色。通过实例代码展示如何在Kotlin中实现观察者模式,指出与Java的相似性以及Kotlin语法的简洁性,同时修正了之前笔记中关于被观察者和订阅者的概念混淆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kotlin与java基本使用方法一样,不过写法更简洁。

观察者,感觉就是多个事件源与一个订阅者,订阅者订阅多个事件源,当订阅者接收数据时候,所有的事件源都触发并更新数据。

换成观察者,就是,一个目标对象状态改变,其它观察它的对象都收到通知,并改变,像广播一样。

用kotlin代码实现如下:之前在菜鸟写过笔记,有一处错误,被观察者后面的 订阅者 -》修改为 被订阅者。

/**
 * 观察者
 */
interface Observer {
    fun <T : Any?> update(msg: T)
}

/**
 * 观察者1,2,3
 */
class Ob1(private val id: Int = 0) : Observer {
    override fun <T> update(msg: T) {
        println("接收消息,观察者$id:$msg")
    }
}
//这里是kotlin的类委托
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)
        }
    }
}

/**
 * Kotlin版 观察者模式
 * @author IWH
 * Des:kotlin1.3支持主函数省略参数
 */
fun main() {

    val sub = Subject().apply {
        attach(Ob1())
        attach(Ob2())
        attach(Ob3())
    }
    with(sub){
        setMsg(123)
        setMsg("hello world")
        setMsg('A')
        setMsg(null)
    }
}

输出:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值