观察者模式
- 观察者模式的定义:
- 指多个对象间存在一对多的依赖关系,当一个对象发生改变时,所有依赖他的对象都会得到通知并自动更新。
- 这种模式又被称为发布—订阅模式、模型—视图模式,它是对象行为型模式。
- 观察者模式的优点:
降低目标与观察者之间的耦合关系,两者是抽象耦合关系。
利用观察者模式设计一个学校铃声处理系统
1.自定义观察者模式实现
class BellEvent {
private val listeners = ArrayList<BellEventListener>()
fun addListener(listener: BellEventListener) {
listeners.add(listener)
}
fun ring() {
notifyObserver()
}
private fun notifyObserver() {
for (listener in listeners) {
listener.update()
}
}
}
interface BellEventListener {
fun update()
}
class Student : BellEventListener {
override fun update() {
println("学生:上课")
}
}
class Teacher : BellEventListener {
override fun update() {
println("老师:上课")
}
}
private fun test() {
val bell = BellEvent()
bell.addListener(Student())
bell.addListener(Teacher())
bell.ring()
}
2.使用Java中自带的Observable类和Observer接口
- 在Java中,通过Observable类、Observer接口,定义了观察者模式,只要实现它们的子类就可以实现观察者模式。
import java.util.*
class Bell : Observable() {
fun ring() {
super.setChanged()
super.notifyObservers()
}
}
class Student : Observer {
override fun update(o: Observable?, arg: Any?) {
println("学生:上课")
}
}
class Teacher : Observer {
override fun update(o: Observable?, arg: Any?) {
println("老师:上课")
}
}
private fun test() {
val bell = Bell()
bell.addObserver(Student())
bell.addObserver(Teacher())
bell.ring()
}
参考资料