zoukankan      html  css  js  c++  java
  • 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();
        }

    }

  • 相关阅读:
    "V租房"搭建微信租房平台,让租房人发起求租需求并接收合适房源回复,提高租房效率 | 36氪
    金融街
    Jsensation | 氪加
    Polyvore
    周翔宇_百度百科
    鸵鸟心态
    新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子
    【案例】舒邑:一个女装品牌的奇葩打法-@i黑马
    专访OPPO李紫贵:ColorOS用户过千万 软硬融合生态版图初现
    关于我们-EIBOA易博男装-互联网品质男装品牌-在线销售男士西服,衬衫,外套,西裤,领带|全场免运费,30天退换货保障
  • 原文地址:https://www.cnblogs.com/working/p/2936481.html
Copyright © 2011-2022 走看看