原创

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

正文到此结束
本文目录