架构师内功心法23——观察者模式

    1、定义:又叫发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖于它的对象都会得到通知并被自动更新。属于行为型模式。

    2、适用场景:

        a.当一个抽象模型包含两个方面内容,其中一个方面依赖于另一个方面;

        b.其他一个或多个对象的变化依赖于另一个对象的变化;

        c.实现类似广播机制的功能,无需知道具体收听者,只需分发广播,系统中感兴趣的对象会自动接受该广播;

        d.多层级嵌套使用,形成一种链式触发机制,使得事件具备跨域(跨越两种观察者类型)通知。

    3、优点:

        a.观察者和被观察者是松耦合的,符合依赖倒置原则;

        b.分离了表示层(观察者)和数据逻辑层(被观察者),并且建立了一套触发机制,使得数据的变化可以响应到多个表示层上;

        c.实现了一对多的通讯机制,支持事件注册机制,支持兴趣分发机制,当被观察者触发事件时,只有感兴趣的观察者可以接收到通知。

    4、缺点:

        a.如果观察者数量过多,则事件通知会耗时较长;

        b.事件通知呈线性关系,如果其中一个观察者处理事件卡壳,会影响后续的观察者接收该事件;

        c.如果观察者和被观察者之间存在循环依赖,则可能造成两者之间的循环调用,导致系统崩溃。

    5、源码中的体现:以Listener结尾的类基本都是观察者模式。

    6、实现观察者的api方式:

        jdk:类实现Observer接口;

        guava:方法上加@Subscribe注解。


代码


类图


IObserver


ISubject


ConcreteSubject


ConcreteObserver


Test

你可能感兴趣的:(架构师内功心法23——观察者模式)