背景:

        古人云:知己知彼,百战不殆。打仗,靠的是信息,古时候是斥候,现如今叫侦查兵,也就是拿到敌人的动向,才好排兵布阵,不然一不小心被偷袭,那可能面临着全军覆没的风险。所以,掌握信息,才能打好准备之仗。

故事:

       

        1号斥候:报……敌方正在埋锅造饭。

        我方:修整,造饭

        2号斥候:报……敌方正在集结。

        我方:再探,集结,排兵布阵

        3号斥候:报……敌方正在睡觉

        我方:再探,全速前进,全军出击,偷袭。

        4号斥候:报……敌方正在训练。

        我方:没事了,大家睡觉吧

        5号斥候……

分解:

        所以,要获取信息的前提是我方派出了一堆斥候消息打探,地形侦查等,那斥候在观察到地方有所动作后迅速返回,将得到的消息反馈给我方后,我方做出相应的动作,在此情景中,观察者为斥候,被观察的对象为敌方。

代码:

观察者:

interface MyObserver {
    fun update(content:String)
}
class ChiHou : MyObserver {
    override fun update(content: String) {
        println("报:地方有活动……")
        reportToCommander(content)
        println("汇报完毕!")

    }

    private fun reportToCommander(reportContent: String) {
        println("领导:敌方有活动 $reportContent")
    }
}

被观察者:

open class MyObservable {

    var observerList : MutableList<MyObserver> = mutableListOf()

    fun addObserver(observer: MyObserver) {
        observerList.add(observer)
    }

    fun deleteObserver(observer: MyObserver) {
        observerList.remove(observer)
    }

    fun notifyObservers(content: String) {
        for (observer in observerList){
            observer.update(content)
        }
    }
}
class DiFang : MyObservable() {
   fun haveBreakfast() {
        println("敌方:我正在埋锅造饭……")
        notifyObservers("韩非子在吃饭")
    }

   fun funning() {
        println("敌方:我正在娱乐……")
        notifyObservers("敌方在娱乐")
    }

}

运行:

object Client {
    @Throws(InterruptedException::class)
    @JvmStatic
    fun main(args: Array<String>) {
        val diFang = DiFang()
        val chihou1 = ChiHou()
        val chihou2 = ChiHou()
        val chihou3 = ChiHou()
        diFang.addObserver(chihou1)
        diFang.addObserver(chihou2)
        diFang.addObserver(chihou3)

        Thread.sleep(1000)
        chihou1.haveBreakfast()
        Thread.sleep(1000)
        chihou1.funning()
    }
}

上述只是简单实现,详情请参考Java中java.util.Observable和java.util.Observ实现机制。

更多推荐