描述:
- 观察者模式(也称为发布/订阅模式)提供了避免组件之间紧密耦合的另一种方法,它将观察者和被观察的对象分离开。
- 在该模式中,一个对象通过添加一个方法(该方法允许另一个对象,即观察者注册自己)使本身变得可观察。
- 当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者收到消息后所执行的操作与可观察的对象无关,这种模式使得对象可以相互对话,而不必了解原因
- Java语言与C#语言的事件处理机制就是采用的此种设计模式。
类图
interface Subject{
public void registerObserver(Observer o);//注册观察者
public void removeObserver(Observer o);//移除观察者
public void notifyObserver();//通知观察者
}
interface Observer{
public void update(float temp);//更新天气情况
}
class WhetherDisplay implements Observer{
private float temperature;
public WhetherDisplay(Subject subject){
subject.registerObserver(this);//将自身注入到观察者集合中
}
@Override
public void update(float temp) {
this.temperature=temp;
display();
}
public void display(){
System.out.println("【1】天气变化=》 " + temperature);
}
}
class WhetherDisplay2 implements Observer{
private float temperature;
public WhetherDisplay2(Subject subject){
subject.registerObserver(this);//将自身注入到观察者集合中
}
@Override
public void update(float temp) {
this.temperature=temp;
display();
}
public void display(){
System.out.println("【2】天气变化=》 " + temperature);
}
}
class Whether implements Subject{
//添加
private ArrayList observers = new ArrayList<>();
private float temperature;
@Override
public void registerObserver(Observer o) {
this.observers.add(o);//将接收到的观察者注册到数组中
}
@Override
public void removeObserver(Observer o) {
this.observers.remove(o);//将观察者从数组中移除
}
@Override
public void notifyObserver() {
//逐个通知观察者集合中的所有观察者
for (int i=0;i 


