观察者模式笔记

观察者模式学习笔记,模拟微信公众号推送消息
观察者:用户
被观察者:微信公众号
推送消息的内容可以是第三方服务商提供的

类图如下
在这里插入图片描述

1. 观察者接口

interface Observer {
    fun update(message: String?)
}

2. 被观察者接口

interface Observable {
    fun add(observer: Observer)
    fun remove(observer: Observer)
    fun notifyObservers()
}

3. 具体观察者

class User:Observer {
    companion object{
        const val  TAG = "User"
    }

    private var message: String  ?= null
    private var name: String

    constructor(name: String) {
        this.name = name
    }
    
    override fun update(message: String?) {
        this.message = message
        read()
    }

    private fun read(){
        Log.d(TAG, "$name 收到消息: $message")
    }
}

4. 具体被观察者

class WechatServer:Observable {
    private var message: String ?= null
    private var userList = mutableListOf<Observer>()

    override fun add(observer: Observer) {
        userList.add(observer)
    }

    override fun remove(observer: Observer) {
        userList.remove(observer)
    }

    override fun notifyObservers() {
        for (index in 0 until userList.size) {
            userList[index].update(message)
        }
    }
    
    fun pushMessage(message: String){
        this.message = message
        notifyObservers()
    }
}

5. 测试

@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {

    //...
	
    @Test
    fun runObserverTest() {
        var server = WechatServer()
        
        var Tom = User("Tom")
        var Petter = User("Petter")
        var Jon = User("Jon")
        
        server.add(Tom)
        server.add(Petter)
        server.add(Jon)

        server.pushMessage("车到站了")
    }
}

6, 结果

07-19 10:20:23.847 21705 21744 D User : Tom 收到消息: 车到站了
07-19 10:20:23.847 21705 21744 D User : Petter 收到消息: 车到站了
07-19 10:20:23.847 21705 21744 D User : Jon 收到消息: 车到站了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值