安卓中的GUI经常会用到观察者模式,当发生点击等事件时,就会处理一些逻辑,比如EventBus:

我写了一个简单的例子,报社发布新闻,读者获取新闻。
package MyObserver
// 被观察者
class Newspaper{
private var title:String = ""
private var text:String = ""
private var readers = HashSet<Reader>()
private var changed:Boolean = false
public fun addReader(reader:Reader){
readers.add(reader)
}
public fun deleteReader(reader: Reader){
if(reader in readers){
readers.remove(reader)
}
}
private fun notifyReader(){
if(changed){
for(reader in readers){
reader.update(title, text)
}
}
changed = false
}
public fun set(title:String, text:String){
this.title = title
this.text = text
changed = true
notifyReader()
}
}
package MyObserver
// 观察者
class Reader(val name:String) {
private var title:String = ""
private var text:String = ""
public fun update(title:String, text:String){
this.title = title
this.text = text
}
public fun show(){
println("name is $name, title is $title, text is $text")
}
}
package MyObserver
fun main() {
val reader1 = Reader("Jack")
val reader2 = Reader("Rose")
val newspaper = Newspaper();
newspaper.addReader(reader1)
newspaper.addReader(reader2)
newspaper.set("星期一", "下雨了")
reader1.show()
reader2.show()
newspaper.set("星期二", "热死了")
reader1.show()
reader2.show()
}
运行结果:

本文通过一个报社与读者的实例,展示了观察者模式在安卓GUI中的应用。当报社(被观察者)发布新闻时,所有订阅的读者(观察者)会收到更新通知,实现事件响应逻辑。
400

被折叠的 条评论
为什么被折叠?



