观察者模式(Kotlin)学习心得

一、被观察者(Demo中的角色:ZhengFuObservable)

(ZhengFuObservable)政府相关政策发生改变,立即通知它的观察者。具体源码实现如下所示:
package com.study.observer

import java.util.*

class ZhengFuObservable : Observable() {
    /**
     * 政策更新
     */
    fun policyUpdate(policy: String) {
        println("政府政策改变了")
        //通知改变
        setChanged()
        notifyObservers(policy)
    }
    
    /**
     * 政策修改
     */
    fun policyCancel(policy: String) {
        println("政府政策取消了")
        //通知改变
        setChanged()
        notifyObservers(policy)
    }

}

二、观察者(Demo中的角色:MaYun、MaHuaTeng、LiYanHong)

相关观察者接受到通知之后,根据自身需求展开相应逻辑处理。具体源码实现如下所示:
package com.study.observer

import java.util.*

/**
 * 观察者马云,如果被观察者发出通知,自己相应的处理
 */
class MaYun : Observer {

    override fun update(o: Observable?, arg: Any?) {
        notifyAlibabaCompany(arg.toString())
    }

    /**
     * 通知本公司员工政策的改变
     */
    fun notifyAlibabaCompany(msg: String) {
        println("阿里巴巴员工::$msg")
    }

}
package com.study.observer

import java.util.*

/**
 * 观察者马化腾,如果被观察者发出通知,自己相应的处理
 */
class MaHuaTeng : Observer {

    override fun update(o: Observable?, arg: Any?) {
        notifyTencentCompany(arg.toString())
    }

    /**
     * 通知本公司员工政策的改变
     */
    fun notifyTencentCompany(msg: String) {
        println("腾讯员工::$msg")
    }

}
package com.study.observer

import java.util.*

/**
 * 观察者李彦宏,如果被观察者发出通知,自己相应的处理
 */
class LiYanHong : Observer {

    override fun update(o: Observable?, arg: Any?) {
        notifyBaiDuCompany(arg.toString())
    }

    /**
     * 通知本公司员工政策的改变
     */
    fun notifyBaiDuCompany(msg: String) {
        println("百度员工::$msg")
    }
}

三、主程序的调用

具体源码如下所示:
package com.study.observer

fun main(args: Array) {
    var zhengfu = ZhengFuObservable()

    var maYun = MaYun()
    var maHuaTeng = MaHuaTeng()
    var liYanHong = LiYanHong()

    zhengfu.addObserver(maYun)
    zhengfu.addObserver(maHuaTeng)
    zhengfu.addObserver(liYanHong)

    zhengfu.policyUpdate("第三方支付牌照改变了")

    zhengfu.policyCancel("企业所得税取消了")
}

四、运行结果

你可能感兴趣的:(设计模式)