安卓中的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()
}
运行结果: