JAVA设计模式-Observer (观察者 )

1.概念
observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。
2.实例
该实例模拟了烧水的过程,涉及三个对象,Heater(热水器),Display(显示器),Alarm(报警器).
   模拟过程:为了便于运行,水的初始化温度为90,沸点为95,显示器依据热水器显示温度,显示器显示温度为95时,报警器开始报警。明显可以看出Heater是subject ,Display 是它的 Obsrver,同时Display亦是suject,因为它要被报警器观察,所以Alarm是Display的Observer.
   实现过程:
a.Heater.java

import java.util.Observable;   
  
public class Heater extends Observable {   
  
    private int temperature;   
  
    public int getTemperature() {   
        return temperature;   
    }   
    public void setTemperature(int temperature) {   
        this.temperature = temperature;   
    }   
    public void boilWater() {   
        for (int i = 90; i < 100; i++) {   
            temperature = i;   
            this.setChanged();   
            this.notifyObservers();   
        }   
    }   
}  


b.Display.java

import java.util.Observable;   
import java.util.Observer;   
  
public class Display extends Observable implements Observer {   
  
    private String status = "未开";   
  
    public void setStatus(String status) {   
        this.status = status;   
    }   
    public void displayTemputer(int temperature) {   
        if (temperature > 95) {   
            this.setStatus("沸腾");   
            this.setChanged();   
            this.notifyObservers();   
        }   
        System.out.println("状态:" + status + " 现在温度:" + temperature + "");   
    }   
    public void update(Observable o, Object arg) {   
        displayTemputer(((Heater) o).getTemperature());//这里不是很好   
    }   
}  


c.Alarm.java

import java.util.Observable;   
import java.util.Observer;   
  
public class Alarm implements Observer {   
  
    public void makeAlarm() {   
        System.out.println("嘀嘀嘀...水已经烧开 ");   
    }   
    public void update(Observable o, Object arg) {   
        makeAlarm();   
    }   
}  


d.测试类testObserver.java

public class testObserver {   
  
    public static void main(String[] args) {   
        Heater header = new Heater();   
        Display display = new Display();   
        Alarm alarm = new Alarm();   
        header.addObserver(display);   
        display.addObserver(alarm);   
        header.boilWater();   
    }   
}  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值