/** * 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"); } }