欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

設(shè)計模式-通過微信公眾號示例講解觀察者模式 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

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

您當前位置>首頁 » 新聞資訊 » 公眾號相關(guān) >

設(shè)計模式-通過微信公眾號示例講解觀察者模式

發(fā)表時間:2020-10-2

發(fā)布人:葵宇科技

瀏覽次數(shù):76

實例

微信公眾號的流程:
首先看一下公眾號的基礎(chǔ)功能:

  • 發(fā)布文章
  • 通知所有人或者是通知部分人
  • 刪除關(guān)注者
  • 點擊關(guān)注(已關(guān)注的不能重復關(guān)注)

然后訂閱公眾號的讀者只需訂閱公眾號即可

當公眾號的作者發(fā)布內(nèi)容選擇相關(guān)的讀者之后,訂閱公眾號的相關(guān)讀者就能收到消息。

實現(xiàn)

  • 定義抽象被觀察者(微信公眾號)
  • 定義抽象觀察者(具體的微信公眾號)
  • 定義具體的被觀察者(讀者)
  • 定義具體的觀察者(訂閱具體微信公眾號的讀者)
  • 觀察者訂閱被觀察者(讀者訂閱公眾號)
  • 被觀察者發(fā)送消息(公眾號發(fā)送內(nèi)容)

定義抽象被觀察者

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,"接收到通知:$data")
    }
}

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

    }
}

建立二者的聯(lián)系

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

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

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

// 記得移除,防止內(nèi)存泄漏
subjectOne.removeObserver(observerOne)
subjectOne.removeAll()

參考

  • RxJava

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