您的位置:首页 > 其它

观察者模式

2017-06-30 22:19 92 查看
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>();
}
@Override
public void registerObserver(Observer o) {
Observers.add(o);
}

@Override
public void removeObserver(Observer o) {
int i = Observers.indexOf(o);
if(i>0){
Observers.remove(i);
}
}
@Override
public 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>();
}
@Override
public void registerObserver(Observer o) {
Observers.add(o);
}

@Override
public void removeObserver(Observer o) {
int i = Observers.indexOf(o);
if(i>0){
Observers.remove(i);
}
}
@Override
public 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);
}
@Override
public void display() {
System.out.println(toString());
}

@Override
public void update(int temp, int humidity, int pressure) {
this.temp = temp;
this.humidity  =humidity;
display();
}
@Override
public 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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  观察者模式