PropertyChangeSupport类--观察者模式

一、概述

  本文主要分享观察者模式在PropertyChangeSupport类的使用,最后给出一个小demo

二、观察者模式简述

  主题:维护观察者列表,当自身状态发生变化时,执行Notify操作(此处一般是在方法内部delegate调用观察者的Update方法)

  

三、PropertyChangeSupport类中观察者模式的使用

    0、构造函数定义被监听对象    

                 pcs = new PropertyChangeSupport(new Person());//在这里主题的状态即为person对象的属性的值的状态,如该对象调用了setAge()方法,那么即为主题的状
          //态发生了变化,应该调用fire方法通知到相应的Listeners

 

    1、map属性用于维护监听者(观察者)列表,其内部实现是 HashMap<String, PropertyChangeListener[]>    

    2、调用addPropertyChangeListener方法为相应属性添加监听器(观察者)

    3、调用firePropertyChange方法类似于Notify方法(当被监听对象属性值发生变化时调用)

    4、在firePropertyChange方法中delegate到每个观察者(PropertyChangeListener)的propertyChange方法。

 

四、小demo

public class TestPropertyChangeSupport {
    public static void main(String[] args) {

        TestPropertyChangeSupport bean = new TestPropertyChangeSupport();//生成一个对象
        PropertyChangeSupport pcs = new PropertyChangeSupport(bean);//定义主题

        pcs.addPropertyChangeListener((evt)-> System.out.println("args = [" + evt + "]"));//添加监听器(观察者)此处不指定属性即为监听所有属性
        //当主题的状态发生变化时,通知到观察者,进行相应的操作
        bean.setExampleProperty("Test");//主题状态发生变化
        pcs.firePropertyChange("exampleProperty",null,"Test");//通知到观察者
    }
    String exampleProperty;

    public String getExampleProperty() {
        return exampleProperty;
    }

    public void setExampleProperty(String exampleProperty) {
        this.exampleProperty = exampleProperty;
    }
}

2018-10-22 00:35:05 

转载于:https://www.cnblogs.com/pepper-1996/p/9827790.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java提供了一种监听对象变化的机制,即使用JavaBean的属性变化监听器(Property Change Listener)。这个监听器可以监听一个对象中某个属性的变化,并在属性变化时触发相应的事件。 要实现JavaBean的属性变化监听器,需要遵循以下步骤: 1. 实现PropertyChangeListener接口,并实现其propertyChange方法,该方法会在属性变化时被调用。 ```java public class MyPropertyChangeListener implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { // 处理属性变化事件 } } ``` 2. 在需要监听的对象中添加PropertyChangeSupport对象,并在需要监听的属性的setter方法中调用firePropertyChange方法触发属性变化事件。 ```java public class MyClass { private String myProperty; private PropertyChangeSupport propertyChangeSupport; public MyClass() { propertyChangeSupport = new PropertyChangeSupport(this); } public void setMyProperty(String newValue) { String oldValue = this.myProperty; this.myProperty = newValue; propertyChangeSupport.firePropertyChange("myProperty", oldValue, newValue); } public void addPropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(listener); } } ``` 在上面的代码中,我们在MyClass类中添加了一个PropertyChangeSupport对象,并在setMyProperty方法中调用了firePropertyChange方法,将属性变化事件通知给所有注册的PropertyChangeListener。 3. 在需要监听对象的代码中,添加PropertyChangeListener并实现相应的处理方法。 ```java MyClass myObject = new MyClass(); myObject.addPropertyChangeListener(new MyPropertyChangeListener()); ``` 在上面的代码中,我们向MyClass对象中添加了一个MyPropertyChangeListener对象,用于监听其属性变化事件。 通过上面的步骤,我们就可以实现对一个对象属性变化的监听。当属性变化时,我们的监听器会自动被触发,并执行相应的处理方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值