• 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();
        }

    }

  • 相关阅读:
    python验证卡普耶卡(D.R.Kaprekar)6174猜想
    关于java环境变量配置出现javac命令无法运行的解决办法
    关于QQ农场牧场等曾经流行的游戏的一些见解
    个人博客九
    个人博客八
    个人博客七
    个人博客六
    第十一周学习进度
    个人博客五
    个人博客四
  • 原文地址:https://www.cnblogs.com/working/p/2936481.html
Copyright © 2020-2023  润新知