設計模式-通(tōng)過微信公衆号示例講解觀察者模式 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

設計模式-通(tōng)過微信公衆号示例講解觀察者模式

發表時間:2020-10-2

發布人:葵宇科技

浏覽次數:50

實例

微信公衆号的流程:
首先看一下(xià)公衆号的基礎功能:

  • 發布文(wén)章
  • 通(tōng)知所有人或者是通(tōng)知部分人
  • 删除關(guān)注者
  • 點擊關(guān)注(已關(guān)注的不能重複關(guān)注)

然後訂閱公衆号的讀者隻需訂閱公衆号即可(kě)

當公衆号的作者發布内容選擇相關(guān)的讀者之後,訂閱公衆号的相關(guān)讀者就能收到消息。

實現

  • 定義抽象被觀察者(微信公衆号)
  • 定義抽象觀察者(具體的微信公衆号)
  • 定義具體的被觀察者(讀者)
  • 定義具體的觀察者(訂閱具體微信公衆号的讀者)
  • 觀察者訂閱被觀察者(讀者訂閱公衆号)
  • 被觀察者發送消息(公衆号發送内容)

定義抽象被觀察者

interface Subject {
    fun addObserver(observer: Observer?)
    fun removeObserver(observer: Observer?)
    fun removeAll()
    fun notifyObserver(observer: Observer?,data:Any)
    fun notifyAll(data: Any)
}

定義抽象觀察者

interface Observer {

    fun update(subject: Subject, data:Any)
}

定義具體的被觀察者

class SubjectOne:Subject {
    private val observerList = mutableListOf<Observer>()
    override fun addObserver(observer: Observer?) {
        if (!observerList.contains(observer)){
            observer?.let { observerList.add(it) }
        }
    }

    override fun removeObserver(observer: Observer?) {
        observerList.remove(observer)
    }

    override fun removeAll() {
        observerList.clear()
    }

    override fun notifyObserver(observer: Observer?, data: Any) {
        observer?.update(this,data)
    }

    override fun notifyAll(data: Any) {
        for (observer in observerList){
            observer.update(this,data)
        }
    }
}

定義具體的觀察者

// 觀察者1
class ObserverOne:Observer {
    private val TAG = ObserverOne::class.java.simpleName
    override fun update(subject: Subject, data: Any) {
        Log.e(TAG,"接收到通(tōng)知:$data")
    }
}

// 觀察者2
class ObserverTwo:Observer {
    private val TAG = ObserverTwo::class.java.simpleName
    override fun update(subject: Subject, data: Any) {
        Log.e(TAG,"接收到通(tōng)知:$data")

    }
}

建立二者的聯系

val subjectOne = SubjectOne()
val observerOne = ObserverOne()
val observerTwo = ObserverTwo()

// 訂閱
subjectOne.addObserver(observerOne)
subjectOne.addObserver(observerTwo)

subjectOne.notifyObserver(observerOne,"observerOne 接收的消息")
subjectOne.notifyAll("所有的消息")

// 記得移除,防止内存洩漏
subjectOne.removeObserver(observerOne)
subjectOne.removeAll()

參考

  • RxJava

相關(guān)案例查看更多