欢迎来到天天文库
浏览记录
ID:40199698
大小:63.00 KB
页数:4页
时间:2019-07-25
《JDK观察者模式介绍》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、java观察者模式介绍概念 Observer模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变时,所有依赖于它的对象(观察者)都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。相关类介绍1.Obervable类此类表示模型视图范例中的observable对象,继承它的类表示应用程序想要观察的对象。一个
2、observable对象可以有一个或多个观察者。观察者是实现Observer接口的任意对象。一个observable实例改变后,调用Observable的notifyObservers方法的应用程序会通过调用观察者的update方法来通知观察者该实例发生了改变。方法摘要voidaddObserver(Observero)如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。未指定向多个观察者发送通知的顺序。protectedvoidclearChanged()指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以hasChanged方法将返回false。n
3、otifyObservers方法自动调用此方法。intcountObservers()返回Observable对象的观察者数目。voiddeleteObserver(Observero)从对象的观察者集合中删除某个观察者。向此方法传递null无效。voiddeleteObservers()清除观察者列表,使此对象不再有任何观察者。booleanhasChanged()测试对象是否改变。当且仅当在此对象上最近调用了setChanged方法时才返回true;否则返回false。voidnotifyObservers()如果hasChanged方法指示对象已改变,则通知其所有观察者,并调
4、用clearChanged方法来指示此对象不再改变。每个观察者都有其update方法,其调用参数有两个:observable对象和null。换句话说,此方法等效于:notifyObservers(null)voidnotifyObservers(Objectarg)如果hasChanged方法指示对象已改变,则通知其所有观察者,并调用clearChanged方法来指示此对象不再改变。每个观察者都有其update方法,其调用参数有两个:observable对象和arg参数。arg可以是任意对象protectedvoidsetChanged()标记此Observable对象为已改变的对
5、象;现在hasChanged方法将返回true关于发送通知的顺序Observable类中所提供的默认实现将按照其注册的重要性顺序来通知Observers,但是子类可能改变此顺序,从而使用非固定顺序在单独的线程上发送通知,或者也可能保证其子类遵从其所选择的顺序。注意:此通知机制与线程无关,并且与Object类的wait和notify机制完全独立。新创建一个observable对象时,其观察者集是空的。当且仅当equals方法为两个观察者返回true时,才认为它们是相同的。2.Oberver接口这是个接口类,这个接口只有一个为实现的抽象方法update。实现该接口的对象成为观察者,该对
6、象要实现update方法。注册了该对象(观察者)的对象(观察者)实例条用notifiyObservers方法后,观察者会自动执行update方法。方法摘要voidupdate(Observableo,Objectarg)只要改变了observable对象就调用此方法。o-observable对象。arg-notifyObservers方法的参数。实例该实例模拟了烧水的过程,涉及三个对象,Heater(热水器),Display(显示器),Alarm(报警器).模拟过程:为了便于运行,水的初始化温度为90,沸点为95,显示器依据热水器显示温度,显示器显示温度为95时,报警器开始报警。明
7、显可以看出Heater是subject,Display是它的Obsrver,同时Display亦是subject,因为它要被报警器观察,所以Alarm是Display的Observer.Heater.java类publicclassHeaterextendsObservable{privateinttemperature;publicintgetTemperature(){returntemperature;}publicvoidsetTemperature(intt
此文档下载收益归作者所有