什么是观察者模式设计模式
所谓观察者模式,就是定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则全部依赖于他的对象都会获得通知并被自动更新的设计模式。框架
观察者模式的实现方式异步
观察者调用Observer接口,被观察者调用Observable接口。当被观察者有更新时,遍历全部观察者,这样就实现了一对多的通知功能。ide
《西游记》第一回孙悟空出世,立刻便被千里眼和顺风耳报告给玉皇大帝,这就是一个典型的观察者模式。this
首先定义观察者spa
public class Spy implements Observer { |
而后被观察者是花果山server
public class HuaguoMountain extends Observable { |
被观察者发生变化接口
HuaguoMountain mountain = new HuaguoMountain(); |
Android源码中的观察者模式
(1)notifyDataSetChanged
不管ListView仍是RecyclerView里,notifyDataSetChanged方法都是相当重要的,这是最多见的观察者模式。
(2)BroadcastReceiver
BroadcastReceiver是Android四大组件之一,也是一个典型的观察者模式。
(3)EventBus
EventBus 是一个组件间通讯框架,开发者在Activity、Fragment、Service、Thread之间传递消息时能够避免使用复杂的Intent、Handler和BroadCast
(4)RxJava
RxJava做为一样基于观察者模式的组件间通讯框架,要比EventBus的应用更普遍。尤为它针对Android的扩展——RxAndroid彻底能够替代AsycTask来完成各类异步操做,并且还有BindActivity和BindFragment方法来避免异步操做时的Activity和Fragment的生命周期问题。
Android开发中如何利用观察者模式
(1)在观察者模式中,观察者和被观察者之间是抽象耦合,保证了订阅系统的灵活性和可扩展性。在须要UI层与业务逻辑解耦的关联行为场景或事件多级触发场景很是实用。
(2)跨进程或者跨App的消息交换场景。
须要注意的几个问题
(1)由于Java中消息的通知默认是顺序执行,在观察者过多或者某个观察者出现卡顿的状况下,会影响总体的执行效率。