初涉设计模式--观察者模式

这几天在看ssh整合的一些具体注意事项合乱码问题,设计模式也没来得及看了,号不容易有点空闲时间,看了看观察者模式:
观察者模式:定义了对象之间的一对多依赖,这样一来,当对象改变状态时,它的所有依赖者都会收到通知并自动更新.
还学到了一个新的设计原则:松耦合设计。
下面看代码:

1.定义主题接口
public interface Subject {
public void rigisterObserver(Observer o);//注册观察者

public void removeObserver(Observer o);//取消观察观察者

public void notifyOberver();
}

2.定义观察者接口。
public interface Observer {
public void update(double tem, double hum, double pre);
}
3.定义观察者另外实现的接口。
public interface DisplayElement {
public void display();
}

4.定义主题。
import java.util.ArrayList;

public class WeatherData implements Subject {

private double tem;// 但前温度
private double hum;// 但前湿度
private double pre;// 但前气压
private ArrayList<Observer> observers;

public WeatherData() {
observers = new ArrayList<Observer>();
}

public void measureChanged() {
this.notifyOberver();
}

/**
* 模拟气象装置
*/
public void setMeasurement(double tem, double hum, double pre) {
this.tem = tem;
this.hum = hum;
this.pre = pre;
measureChanged();
}

public void notifyOberver() {
for (Observer o : observers) {
o.update(tem, hum, pre);
}

}

public void removeObserver(Observer o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}

}

public void rigisterObserver(Observer o) {
observers.add(o);

}

}
5.定义观察者。
public class CurrentConditionsDisplay implements Observer, DisplayElement {
@SuppressWarnings("unused")
private Subject weatherData;
private double tem;
private double hum;

public CurrentConditionsDisplay(Subject weatherData) {
this.weatherData = weatherData;
weatherData.rigisterObserver(this);// 注册
}

public void update(double tem, double hum, double pre) {
this.tem = tem;
this.hum = hum;
display();
}

public void display() {
System.out.println("当前温度:" + this.tem + "当前湿度:" + this.hum);

}

}

6.测试。
public class Test {

public static void main(String[] args) {
Subject weatherData = new WeatherData();

@SuppressWarnings("unused")
Observer currentConditionsDisplay = new CurrentConditionsDisplay(weatherData);
((WeatherData) weatherData).setMeasurement(10,10,10);

}

}

以上代码参考《headfirst 设计模式》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值