Android设计模式之观察者模式
观察者模式
1.观察者模式也被成为发布/订阅模式;
2.一种一对多的依赖关系,多个观察者对象同时监听某一个主题对象,这个主题对象状态发生变化的时候,会通知所有的观察者对象,使得观察者对象可以自动更新自己.
3.是一种被动的接收来自观察对象的角色.
抽象观察者角色: 为所有具体的观察者定义一个接口,在得到主题(被观察者)通知的时候更新自己;
抽象主题角色: 把所有的观察者对象用一个集合保存;提供一个接口,可以增加和删除观察者角色,一般会用抽象类和接口实现.
具体观察者对象: 实现抽象观察者角色所要求的更新接口,以便使得本身的状态和主题状态相协调;通常我们会使用一个子类实现,若有需要的话具体观察者对象可以保存一个具体被观察者对象的引用;
具体主题角色: 具体主题也就是被观察者对象,内部状态发生改变的时候,给所有登记过的观察者发出通知.具体主题角色使用一个子类实现.
Android中的具体使用:
Android中广播以及Listview数据刷新,调用适配器的notifyDataSetChanged函数,以及EventBus都使用到了观察者模式.(其他还有如MVC模式,消息推送,事件监听等).
当ListView的数据发生变化时,调用Adapter的notifyDataSetChanged函数,这个函数又会调用DataSetObservable的notifyChanged函数,这个函数会调用所有观察者(AdapterDataSetObserver)的onChanged方法,在onChanged函数中又会调用ListView重新布局的函数使得ListView刷新界面。
观察者模式的例子:
1.抽象观察者角色--定义了一个更新的办法被观察者--抽象主题角色:添加/删除观察者对象,集合保存观察者对象;通知观察者对象的方法
2.抽象主题角色第三步: 我们创建2个类实现抽象观察者接口,分别是JimObeserver和TomObserver;
具体观察者角色 具体观察者角色以及具体的被观察者角色
具体的被观察者角色ok,观察者和被观察者都创建完成,我们来测试一下.
MainActivity中实例运行结果如下
运行结果