美文网首页
观察者模式 💣

观察者模式 💣

作者: FredWhite | 来源:发表于2019-11-10 21:09 被阅读0次

    定义

    定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。

    使用场景

    1. 关联行为场景。需注意的是,关联行为是可拆分的,而不是组合关系。
    2. 事件多级触发场景。(责任链模式?)
    3. 跨系统的消息交换场景。如消息队列、事件总线的处理机制。

    角色

    • Subject:抽象主题,也就是 被观察者

    被观察者把所有观察者对象的引用保存到一个集合里,每个被观察者都可以有任意数量的观察者,同时提供一个借口,可以新增和删除观察者。

    • ConcreteSubject:具体主题,也就是 具体被观察者

    该角色将观察状态存入具体观察者对象中,在具体被观察者内部状态发生改变时,给所有注册过的观察者发出通知。

    • Observer观察者

    观察者抽象类,该类定义了一个更新接口,在得到被观察者的改变通知时更新自己。

    • ConcreteObserver具体观察者

    该角色实现抽象观察者角色所定义的更新接口,以便在被观察者的状态发生变化时更新自身的状态。

    实现方式

    此处不给代码示例,具体请参考 Android ListView 中关于 adpter.notifyDatasetChanged() 相关的源码 以及 BroadcastReceiver 相关的源码

    注意

    观察者模式 非常重要!!在 Android 源码中两个典型用处就是上文所说的两个地方,另外,EventBus 以及 AndroidEventBus 中也使用了 发布-订阅模式(也就是观察者模式),可以直接阅读其源码来学习该模式。

    相关文章

      网友评论

          本文标题:观察者模式 💣

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