美文网首页程序员Android技术知识Android知识
每日Android源码设计模式之-11、观察者模式

每日Android源码设计模式之-11、观察者模式

作者: Alexey | 来源:发表于2017-03-29 19:43 被阅读0次

    使用率很高,常常用于GUI系统、订阅-发布系统,他讲观察者与被观察者进行解耦。


    定义:是一种一对多的关系,当一个对象状态改变,依赖与他的其他对象就会得到通知,并且更行。


    使用场景:

    1.关联行为场景,注意关联行为是可拆分的,而不是‘组合’关系。

    2.时间多级出发机制

    3.跨系统的消息交换场景,如消息队列,事件总线的处理机制。


    结构:

    Subject类:抽象的被观察者,把所有的观察者存储在一个集合里。

    ConcreteSubject:具体被观察者类,内部状态改变时,给所有注册过的观察者发送消息。

    Observer:抽象观察者,定义了一个借口,使得在得到主题的更改通知时更新自己。

    ConcreteObserver:实现了接口方法。


    Android 源码:

    listView的notifyDataSetchanged方法,这个方法定义在BaseAdapter中。

    BaseAdapter里面有一个成员变量mDataSetOvservable,当我们调用notifyDataSetChanged的时候,其实调用了mDataSetOvservable.notifyChanged()。

    而这个方法里面进行了一个循环,遍历mObservers,调用onChanged()方法。

    这些观察者是ListView通过setAdapter方法设置Adapter产生的,在设置Adapter的时候会构建一个AdapterDataSetObserver,然后注册到adapter中。

    onchange方法中调用requestLayout()方法对listview进行重新布局。

    相关文章

      网友评论

        本文标题:每日Android源码设计模式之-11、观察者模式

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