PropertyChangeSupport类(观察者模式)
来源:互联网 发布:擎天科技java面试 编辑:程序博客网 时间:2024/06/16 22:54
先看PropertyChangeSupport类的官方文档解释:
This is a utility class that can be used by beans that support bound properties. You can use an instance of this class as a member field of your bean and delegate various work to it.1.关联属性
在JavaBean的设计中,按照属性的不同作用又细分为四类:单值属性、索引属性、关联属性、限制属性。关联属性,也称之为绑定属性。绑定属性会在属性值发生变化时,通知所有相关的监听器。为了实现一个绑定属性,必须实现两个机制。
1) 无论何时,只要属性的值发生变化,该bean必须发送一个PropertyChange事件给所有已注册的监听器。
2) 为了使监听器能够注册,bean必须实现以下两个方法:
void addPropertyChangeListener(PropertyChangeListener listener);
void removePropertyChangerListener(PropertyChangerListener listener);
2.使用PropertyChangeSupport管理监听器
可以通过java.bean包下的PropertyChangeSupport类来管理监听器。要使用这个类,bean必须有一个此类的数据域。
private PropertyChangeSupport listeners = new PropertyChangeSupport(this);
这样可以将添加和移除监听器的任务交给这个对象。
public void addPropertyChangeListener(PropertyChangeListener listener) {
listeners.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
listeners.removePropertyChangeListener(listener);
}
当bean的属性发生变化时,使用PropertyChangeSupport对象的firePropertyChange方法,会将一个事件发送给所有已经注册的监听器。该方法有三个参数:属性的名字、旧的值以及新的值。属性的值必须是对象,如果是简单数据类型,则必须进行包装。
listeners.firePropertyChange("ourString", oldString, newString);
所有注册的监听器实现PropertyChangeListener接口,该接口中只有一个方法。
public void propertyChange(PropertyChangeEvent e)
当bean的属性值发生变化时,该方法中的代码就会被触发。可以通过
e.getOldValue();
e.getNewValue();
来得到changes.firePropertyChange("ourString", oldString, newString);中的oldString和newString。
3.为什么要使用PropertyChangeSupport
使用这个类管理监听器的好处是,它是线程安全的。如果使用一个循环体来set Bean的属性,则这个类可以保证所有监听器执行触发事件的有序。
还有一个好处是,这个类支持fire带索引的属性改变事件(详见java.bean.IndexedPropertyChangeEvent)。此时向注册的监听器发送一个PropertyChangeEvent的方法为:
void fireIndexedPropertyChange(String PropertyName,int index,Object oldValue,Object newValue)
4.实例代码
public class SomeBean {
private String property;
private PropertyChangeSupport changeSupport;
public void setProperty(String newValue) {
String oldValue = property;
property = newValue;
changeSupport.firePropertyChange("property", oldValue, newValue);
}
public void addPropertyChangeListener(PropertyChangeListener l) {
changeSupport.add(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
changeSupport.remove(l);
}
}
转载自点击打开链接
参考文章:
http://www.javalobby.org/java/forums/t19476.htmlhttp://feelingsea.blog.hexun.com/7293978_d.html
0 0
- PropertyChangeSupport类(观察者模式)
- jdk的PropertyChangeSupport属性值修改的观察者模式应用
- PropertyChangeSupport类
- PropertyChangeSupport类
- Java 设计模式 PropertyChangeSupport
- java PropertyChangeSupport类详解
- PropertyChangeSupport类包含的方法
- 观察者模式(行为类)
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(转)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Observer(观察者)模式
- 观察者模式(Java)
- linux syscall系统调用获取线程PID
- URAL 1939 First Seal
- 分布式事务JTA 实现之 JOTM
- simhash类的使用
- 在oracle官网下载javaee等api离线文档
- PropertyChangeSupport类(观察者模式)
- hadoop 2.7.1源码导入eclipse
- javascript里为什么不能把</script>放到字符串里
- Android 控件之四:ImageView 图片框,ImageButton 图片按钮
- 巧妇能为少米之炊(3)——压缩饼干(ZRAM)
- 初识网络游戏防作弊
- SDWebImage使用方法
- Android 控件之五:CheckBox 选择框
- 【error: '_1' was not declared in this scope】