观察者模式(也称发布/订阅模式)是一种基本的设计模式在很多框架中都有使用,提供了避免组件之间紧密耦合的一种方法,它将观察者和被观察者分开,一个对象通过添加一个方法(该方法允许另一个对象即观察者注册自己)使本身变得可观察,当可观察的对象变更时,会将消息发送到已注册的观察者,这些观察者收到消息后执行的操作与可观察对象无关,这种模式使得对象可以互相对话
这里用一个简单的例子来实现观察者模式,代码的主要功能是实现天气预报
被观察者接口
public interface Subject {
//增加观察者
public void registerObserver(Observer o);
//删除观察者
public void removeObserver(Observer o);
//通知所有观察者对象
public void notifyObservers();
}
被观察者实现类
import java.util.ArrayList;
//被观察者
public class Whether implements Subject{
private ArrayList<Observer> observers = new ArrayList<Observer>();
private float temperature;
@Override
public void notifyObservers(){
for(int i = 0; i < this.observers.size(); i++){
observers.get(i).update(temperature);
}
}
public float getTemperature() {
return temperature;
}
public void setTemperature(float temperature) {
this.temperature = temperature;
notifyObservers();
}
@Override
public void registerObserver(Observer o){
this.observers.add(o);
}
@Override
public void removeObserver(Observer o){
this.observers.remove(o);
}
}
观察者接口
public interface Observer {
//提供方法更新要观察变量的值
public void update(float temp);
}
观察者实现类
public class WhetherDisplay1 implements Observer{
private float temprature;
public WhetherDisplay1(Subject whether){
whether.registerObserver(this);
}
@Override
public void update(float temp) {
this.temprature = temp;
}
public void display(){
System.out.println(temprature);
}
}
主函数
public class Main {
public static void main(String args[]) {
Whether whether = new Whether();
Observer whetherDisplay = new WhetherDisplay1(whether);
whether.setTemperature(2);
whether.notifyObservers();
((WhetherDisplay1) whetherDisplay).display();
}
}
2356

被折叠的 条评论
为什么被折叠?



