13_观察者模式

一、被观察者(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<String>) {
    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("企业所得税取消了")
}

四、运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值