(五)观察者模式

2020-07-07  本文已影响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源码应用解析

上一篇下一篇

猜你喜欢

热点阅读