观察者模式
定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发送变化时,它的所有依赖者(观察者)都会收到通知并更新
类型:行为型
适用场景:
关联行为场景,建立一套触发机制
优点:
观察者和被观察者之间建立一个抽象的耦合
观察者模式支持广播通信
缺点:
观察者之间有过多的细节依赖。太高时间消耗及程序复杂度
使用要得当,要避免循环调用
Coding:
创建Course:
创建Qustion类
创建Teacher类(Teacher是观察者,Course是被观察者)
JDK中对于被观察者提供了Observable类
进入到Observable
不仅是使用了线程安全的Vector,而且它内部的很多方法也同样时线程安全的
通知观察者
回到Course类中,编写productQuestion()方法
查看setChanged()方法
将问题发送给对应的观察者
让Teacher这个观察者实现Observer接口
进入到Observer,可以看到它只有一个方法
第一个参数o:被观察的对象
第二个参数arg:notifyObservers方法传过来的对象(也就是被观察者里面通过notifyObservers方法传递过来的参数)
继续编写update()方法
创建Test类
运行结果
查看当前UML类图
总结:观察者模式核心在于Observer和Observable两个接口将三个类联系起来
其主要业务逻辑在update()方法中进行处理。
在增加一个老师:
JDK中的应用 :
在java中有一个按钮,当我们按下之后,就会触发相应的事件,这就是监听,采用的也是观察者模式。
类Event
类RequestContextListener
进入到类ServletRequestListener