java模式之观察者模式

observer模式,当被观察者发生变化时,通知观察者,然后观察者也跟着变化

实例:热水器,显示器,报警器

热水器相对于显示器就是被观察者,显示器相对于热水器就是观察者,但是相对于报警器就是被观察者,报警器相对于显示器就是观察者

java中被观察者继承Observable类,观察者继承Observer类

1:热水器实现类

package pattern.observer;

import java.util.Observable;
/**
 * 热水器:被观察者,
 * 显示器:相对热水器是观察着,相对于报警器是被观察者,
 * 报警器:观察者
 * @author lifeng
 *
 */
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 < 110; i++){
            temperature = i;
            //设置被观察已经改变
            this.setChanged();
            //通知观察则
            this.notifyObservers(temperature);
            
        }
        
    }
    
    

}

2:显示器实现类

package pattern.observer;

import java.util.Observable;
import java.util.Observer;

public class Display extends Observable implements Observer {
    
    private String status;
    
    

    public String getStatus() {
        return status;
    }



    public void setStatus(String status) {
        this.status = status;
    }



    @Override
    public void update(Observable o, Object arg) {
        // TODO Auto-generated method stub
        this.displayTemperature((Integer)arg);

    }
    private void displayTemperature(int temperature){
        if (temperature  > 100){
            
            this.setStatus("沸腾");
            this.setChanged();
            this.notifyObservers(temperature);
        }
    }

}
3:报警器实现类

package pattern.observer;

import java.util.Observable;
import java.util.Observer;

/**
 * 报警器:观察者
 * @author Administrator
 *
 */
public class Alarm implements Observer {
    
    

    @Override
    public void update(Observable o1, Object arg1) {
        this.makeAlarm((Integer)arg1);
    }
    
    private void makeAlarm(int temperature){
        System.out.println("滴滴,,,水已经开了");
        System.out.println("水温为:" + temperature);
    }

}
4:测试代码

package pattern.observer;

public class Client {
    public static void main(String[] args) {
        //被观察者:热水器
        Heater heater = new Heater();
        //被观察者兼观察者:显示器
        Display display = new Display();
        //观察者:报警器
        Alarm alarm = new Alarm();
        heater.addObserver(display);
        display.addObserver(alarm);
        heater.boilWater();
    }

}

 

 

posted @ 2013-02-28 11:09  lifeng_study  阅读(222)  评论(0编辑  收藏  举报