观察者模式

2020-07-23  本文已影响0人  竖起大拇指

什么是观察者模式

观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。
观察者模式的最主要特征是使所要交互的对象尽量松耦合
通俗点所谓观察者模式,可能你用到了,没注意到,一群员工喜欢摸鱼,但是要提防老板,于是前台美女充当了观察者,老板一进门,就发消息老板来了,这就是观察者模式。

//观察者 一般都是一个接口 每一个实现该接口的实现类都是具体的观察者
public interface Observer {
    public void update();
}

//被观察者
abstract public class Subject {

  //观察者列表
    private List<Observer> observerList = new ArrayList<Observer>();

  //增加一个观察者
    public void attachObserver(Observer observer) {
        observerList.add(observer);
    }

    //删除一个观察者
    public void detachObserver(Observer observer){
        observerList.remove(observer);
    }

    //通知所有观察者
    public void notifyObservers(){
        for (Observer observer: observerList){
            observer.update();
        }
    }

发布订阅模式

可以理解为它是观察者模式的一个别称。但是它们之间又有区别:
在现在的发布订阅模式中,称为发布者的消息发送者不会将消息直接发送给订阅者,这意味着发布者和订阅者不知道彼此的存在。在发布者和订阅者之间存在第三个组件,称为消息代理或调度中心或中间件,它维持着发布者和订阅者之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅者。

举一个例子,你在微博上关注了A,同时其他很多人也关注了A,那么当A发布动态的时候,微博就会为你们推送这条动态。A就是发布者,你是订阅者,微博就是调度中心,你和A是没有直接的消息往来的,全是通过微博来协调的(你的关注,A的发布动态)

观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。

观察者模式由具体目标调度,每个被订阅的目标里面都需要有对观察者的处理,这种处理方式比较直接粗暴,但是会造成代码的冗余。

而发布订阅模式中统一由调度中心进行处理,订阅者和发布者互不干扰,消除了发布者和订阅者之间的依赖。这样一方面实现了解耦,还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息,但是不想所有的订阅者都接收到,就可以在调度中心做一些处理,类似于权限控制之类的。还可以做一些节流操作

上一篇下一篇

猜你喜欢

热点阅读