观察者模式

来源:互联网 发布:淘宝卫浴好店 编辑:程序博客网 时间:2024/06/08 19:59

public interface Observer {public void update(int temp,int humidity,int pressure);}public interface Subject {public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObservers();}public interface DisplayElement {public void display();}public class WeaterData implements Subject{private List<Observer> Observers;private int temp;private int humidity;private int pressure;public WeaterData(){Observers  =new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer o) {Observers.add(o);}@Overridepublic void removeObserver(Observer o) {int i = Observers.indexOf(o);if(i>0){Observers.remove(i);}}@Overridepublic void notifyObservers() {for(Observer o:Observers){o.update(temp, humidity, pressure);}}public void change(){notifyObservers();}public void setMeasurements(int temp,int humidity,int pressure){this.temp = temp;this.humidity = humidity;this.pressure=pressure;change();}}public class WeaterData implements Subject{private List<Observer> Observers;private int temp;private int humidity;private int pressure;public WeaterData(){Observers  =new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer o) {Observers.add(o);}@Overridepublic void removeObserver(Observer o) {int i = Observers.indexOf(o);if(i>0){Observers.remove(i);}}@Overridepublic void notifyObservers() {for(Observer o:Observers){o.update(temp, humidity, pressure);}}public void change(){notifyObservers();}public void setMeasurements(int temp,int humidity,int pressure){this.temp = temp;this.humidity = humidity;this.pressure=pressure;change();}}public class CurrentDisplay implements Observer,DisplayElement{private int temp;private int humidity;private int pressure;private Subject weaterdate;public CurrentDisplay(Subject weaterdate){this.weaterdate = weaterdate;weaterdate.registerObserver(this);}@Overridepublic void display() {System.out.println(toString());}@Overridepublic void update(int temp, int humidity, int pressure) {this.temp = temp;this.humidity  =humidity;display();}@Overridepublic String toString() {return "CurrentDisplay [temp=" + temp + ", humidity=" + humidity+ ", pressure=" + pressure + "]";}}public class TestObserver {public static void main(String[] args) {WeaterData wd = new WeaterData();CurrentDisplay cd = new CurrentDisplay(wd);wd.setMeasurements(1, 2, 3);wd.setMeasurements(4, 5, 6);}}


原创粉丝点击