美文网首页
(五)观察者模式

(五)观察者模式

作者: 那就省略号吧 | 来源:发表于2020-07-07 11:48 被阅读0次

    概念

    观察者模式属于行为型模式。是对象之间多对一依赖的一种设计方案,当一个对象被修改时,则会自动通知依赖它的对象,被依赖的对象为Subject(一的一方),依赖的对象为Observer(多的一方);
    该模式与之前写的事件通知(https://www.jianshu.com/p/97ffd1f8890d)思想一致,详情可以查看

    应用场景举例

    天气时时推送,天气数据中心是用于存储天气数据,并提供一个第三方接口用于天气数据推送,有百度,新浪等网址接入到天气数据中心来获取天气数据,这就可以使用到观察者模式。

    UML

    观察者模式

    代码

    • 天气类
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Wether {
        private float temperature;
        private float humidity;
    }
    
    • 被依赖抽象接口
    public interface Subject {
        //新增观察者
        void add(Observer observer);
        //移除观察者
        void remove(Observer observer);
        //通知观察者
        void inform();
    }
    
    • 天气中心
    @Data
    public class WetherData implements Subject{
        private Wether wether;
        private List<Observer> observers;
    
        public WetherData(){
            observers=new ArrayList<>();
        }
        @Override
        public void add(Observer observer) {
            if (!observers.contains(observer)){
                observers.add(observer);
            }
        }
    
        @Override
        public void remove(Observer observer) {
            if (observers.contains(observer)){
                observers.remove(observer);
            }
        }
    
        @Override
        public void inform() {
            observers.forEach(s->s.getWether(this.wether));
        }
    }
    
    • 观察者抽象接口
    public interface Observer {
       //获取天气数据
        void getWether(Wether wether);
    }
    
    • 新浪
    public class Xinlang implements Observer {
        @Override
        public void getWether(Wether wether) {
            System.out.println("新浪--今日湿度:"+wether.getHumidity());
            System.out.println("新浪--今日温度:"+wether.getTemperature());
        }
    }
    
    • 百度
    public class Baidu implements Observer {
        @Override
        public void getWether(Wether wether) {
            System.out.println("百度--今日湿度:"+wether.getHumidity());
            System.out.println("百度--今日温度:"+wether.getTemperature());
        }
    }
    

    spring源码应用解析

    • java.util.Observable


      图片.png
    • 观察者


      图片.png

    相关文章

      网友评论

          本文标题:(五)观察者模式

          本文链接:https://www.haomeiwen.com/subject/zxxaqktx.html