/** * 2012-9-26 * jqsl2012@163.com */ package design.propertyListener; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; /** * @author li * 后台服务 */ public class Service { private PropertyChangeSupport support = new PropertyChangeSupport(this); private String name; public String getName() { return name; } public void setName(String name) { String oldValue = this.name; this.name = name; firePropertyChange("name", oldValue, name); } public void firePropertyChange(String propertyName,Object oldValue,String newValue){ support.firePropertyChange(propertyName, oldValue, newValue); } public void addPropertyChangeListener(PropertyChangeListener listener) { support.addPropertyChangeListener("name",listener); } }
/** * 2012-9-26 * jqsl2012@163.com */ package design.propertyListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; /** * @author li * UI界面 */ public class UI { private Service s; /** * @param s */ public UI(Service s) { this.s = s; } public void init() { s.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { System.out.println("UI界面收到Service后台数据发生变化的通知,而后UI界面开始刷新。"); } }); } }
/** * 2012-9-26 * jqsl2012@163.com */ package design.propertyListener; /** * @author li * */ public class Test { public static void main(String[] args) { /* * 后台服务原本是UI界面的一部分,那么后台数据发生变化了后前台UI界面要获得通知 */ Service s = new Service(); UI ui = new UI(s); ui.init(); //后台数据变化了 s.setName("name"); } }