java实现属性监听
郑重声明: 本文首发于人工博客
1、导读
存在这样的场景,有很多个异步任务在协同操作,它们会根据class中的某个属性的状态去触发相应的事件,当然我们可以用观察者模式去实现这一操作。那么有没有一个现有的轮子可以直接复用的呢?答案是肯定的。今天的主角是jdk8中引入的PropertyChangeListener
2、使用的步骤
- 给class绑定属性监听事件 PropertyChangeSupport changes = new PropertyChangeSupport(this);
- 实现PropertyChangeListener类中的propertyChange事件
- 将监听事件绑定到PropertyChangeSupport对象中addPropertyChangeListener
- 改变对象的属性,并调用changes.firePropertyChange("name", OldName, name)来触发监听事件
- 在不需要的时候可以移除事件
3、简单的代码示例
package top.chenzhuofan.rg;
import com.google.gson.Gson;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
/**
* 功能说明:
*
* @author fengqingyang
* @return
* @date [2020年03月17日上午16:28]
*/
public class RgropertyChangeSupport {
public static void main(String[] args) {
RgropertyChangeSupport rgropertyChangeSupport=new RgropertyChangeSupport();
rgropertyChangeSupport.setName("111");
PropertyChangeListener listener=new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
System.out.println(evt.getPropertyName());
System.out.println(evt.getOldValue());
System.out.println(evt.getNewValue());
}
};
rgropertyChangeSupport.addPropertyChangeListener(listener);
rgropertyChangeSupport.setName("new");
// rgropertyChangeSupport.removePropertyChangeListener(listener);
rgropertyChangeSupport.setName("xxxx");
}
private String name = "1";
private String age = "2";
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
public void setName(String name) {
String OldName = this.name;
this.name = name;
changes.firePropertyChange("name", OldName, name);
}
public String getName() {
return name;
}
public void setAge(String age) {
this.age = age;
}
public String getAge() {
return age;
}
public void getResult(){
System.out.println(new Gson().toJson(this));
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
changes.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
changes.removePropertyChangeListener(listener);
}
}
版权声明:本文为人工博客的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接:https://www.gzcx.net/article/1750
正文到此结束