java设计模式-observer模式

java设计模式-observer模式

ID:19927545

大小:32.50 KB

页数:4页

时间:2018-10-07

java设计模式-observer模式_第1页
java设计模式-observer模式_第2页
java设计模式-observer模式_第3页
java设计模式-observer模式_第4页
资源描述:

《java设计模式-observer模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Observer模式,又称监听模式,观察者模式,是经典设计模式之一(oneofGOF)。java语言中,对这种模式支持的类和接口主要有以下几个,全部来自java.beans包:java.beans.PropertyChangeListener(interface)java.beans.PropertyChangeSupport(class)java.beans.PropertyChangeEvent(class)java.beans.PropertyChangeListener这是一个接口,很显然

2、,所有实现这个接口的类就是listener啦(或者叫observer),它会对被监听的对象的某些变化感兴趣。这个接口就一个方法:java代码publicvoidpropertyChange(PropertyChangeEventevt){//TODOAuto-generatedmethodstub}接口定义很简单,作用也很明显。接受一个event(被监听者产生的PropertyChangeEvent),然后根据这个event做点反应。java.beans.PropertyChangeSupport

3、这个类用在被观察者的类里,用来保存注册的观察者,并负责向他们提供被观察者的变化信息。这个类的方法也不多,不过还是只介绍100%用到的,要不脑子就不够使了,呵呵。java代码publicPropertyChangeSupport(ObjectsourceBean)这是构造函数,参数就是被监听者。PropertyChangeListener一般作为被监听者的一个属性。一般如下使用:java代码privatePropertyChangeSupportlisteners=newPropertyChange

4、Support(this);注意,这个listeners可不是只代表一个监听者,他可能是一群监听者。那么如何这些listeners是谁呢?这回用到下面的方法了。java代码publicvoidaddPropertyChangeListener(PropertyChangeListenerlistener)这个类太容易了,把监听者加进来。就像开十七大一样,记者想要采访,就得先登记一下。显然这个方法可以多次调用(add嘛)。有加就有减:java代码publicvoidremovePropertyCha

5、ngeListener(PropertyChangeListenerlistener)如果这个监听者对被监听者的任何变化多不感兴趣了,就被被监听者赶了出去。好了,记者都到齐了,被监听者有变化了就该通知人家了,使用如下方法的一个:java代码publicvoidfirePropertyChange(PropertyChangeEventevt)publicvoidfirePropertyChange(StringpropertyName,booleanoldValue,booleannewValue

6、)publicvoidfirePropertyChange(StringpropertyName,intoldValue,intnewValue)publicvoidfirePropertyChange(StringpropertyName,ObjectoldValue,ObjectnewValue)实际上,后三个方法的参数都会封装成PropertyChangeEvent,然后调用第一个方法。不过在实际中,我们还是喜欢直接调用后三个中的一个,封装的事我们就不管了。后三个方法的参数都是三个,其中的o

7、ldValue和newValue就是改变前后的值,第一个就是给改变一个名字,好让监听者们根据这个名子来做响应。就像开会,政府的所有信息都会被记者听到,但是有的记者只对台湾问题感兴趣,而有的记者对中日问题感兴趣。对PropertyChangeSupport方法的介绍就这么多吧。注意,PropertyChangeSupport既然被用到了被观察者的类(一般是一个model)里,那么他的这些方法就只在被观察这里调用。java.beans.PropertyChangeEvent这个类我也懒得介绍,看看他的

8、主要方法就明白怎么回事了java代码publicStringgetPropertyName()publicObjectgetNewValue()publicObjectgetOldValue()就者三个类,再有就是具体问题具体分析了。来个例子吧,首先是被观察者:java代码publicclassDomain{protectedStringid;protectedStringname;protectedStringdesName;protectedPropertyChangeSupp

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。