观察者模式(发布-订阅)
对象间一种一对多的依赖关系,一的方的对象改变,则所有依赖于它的对象都会得到通知并自动更新。
本质:触发联动
有点类似于监听器模式,下面进行简单的说明
监听器模式:本质也还是触发联动,本人认为监听器本质是观察者模式的进阶,可以将事件源(谁)将主题进行变化封装成一个对象(事件),然后再将这个事件推给感兴趣的对象(注册的对象),多个主题可以由统一的事件管理器(特殊的类)进行处理,管理器维持着(事件类型-监听者Listener之间的关系,一般用Map<event.class,List>保存)
监听器模式这个可能后面的设计模式不会写,想要我快点写个案例的话可以留个言
//观察者接口
public interface Observer {
void update(int interest);
}
//实现观察者接口
public class Observer1 implements Observer {
@Override
public void update(int interest) {
System.out.println("我被更新啦");
}
}
//被观察的主题
public class Subject {
private int target;
//当主题对象变化时,需要通知的对象集,在Spring中可以使用自动注入的方式减少耦合
//但是对于代码的调用链的查找就不太友好了
private List<Observer> observers = new ArrayList<>();
public void update(int target){
this.target = target;
observers.forEach(o->{
o.update(target);
});
}
//向主题注册需要观察此对象变化的观察者
public void register(Observer observer){
observers.add(observer);
}
//向主题移除指定的观察者
public void remove(Observer observer){
observers.remove(observer);
}
}
客户端测试
public class ObserverClient {
public static void main(String[] args) {
Subject subject = new Subject();
subject.register(new Observer1());//没有Spring使用手动注册
subject.update(10100);
}
}