知識
不管是網(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)案例查看更多
相關(guān)閱讀
- 云南電商網(wǎng)站建設(shè)
- 汽車回收系統(tǒng)
- 保山小程序開發(fā)
- 云南網(wǎng)站建設(shè)哪家好
- 網(wǎng)站建設(shè)列表網(wǎng)
- 網(wǎng)站建設(shè)靠譜公司
- 網(wǎng)絡(luò)公司
- 網(wǎng)站排名優(yōu)化
- 專業(yè)網(wǎng)站建設(shè)公司
- 汽車報廢回收
- 汽車報廢系統(tǒng)
- 云南網(wǎng)站建設(shè)首頁
- 云南省住房建設(shè)廳網(wǎng)站
- 生成海報
- 網(wǎng)站建設(shè)價格
- 云南小程序開發(fā)哪家好
- 麗江小程序開發(fā)
- 政府網(wǎng)站建設(shè)服務(wù)
- 商標注冊
- 云南微信小程序開發(fā)
- 云南網(wǎng)站建設(shè)案例
- 昆明小程序哪家好
- 關(guān)鍵詞快速排名
- 網(wǎng)站優(yōu)化
- 報廢車管理系統(tǒng)
- 文山小程序開發(fā)
- web服務(wù)
- 開發(fā)制作小程序
- 云南百度小程序
- 網(wǎng)站建設(shè)哪家強