java中的观察者模式在android主题切换或者数据刷新时的应用
来源:互联网 发布:android蓝牙串口源码 编辑:程序博客网 时间:2024/05/20 23:56
前段时间稍微优化了android相关主题部分的一些代码,因为之前有这样的一个bug,有时候停留在一个界面的时候,偶尔会有界面中的listview的adapter的刷新。当时考虑了,用广播实在是太low了吧,要发或者注册那么多广播肯定是不现实的,后来考虑了下。,观察者模式应该算是最好的
第一:需求是这样的,如果检测到有主题更新的时候,默认是会下载这个主题并且应用的,所以也就有了观察的触发点,也就是应用主题
第二:观察的对象,每一个需要刷新主题的界面其实都是有一个被观察的对象
第三:我们要构建一个主题的观察者类,也就是作为我们的触发点,将所有的需要观察的对象全部都扔进去进行观察
第四:当主题在更新的时候,及时去通知所有的被观察的对象。从而改变其状态;
下面是实例代码部分:
构建一个我们观察者类的抽象接口IWatcher
package com.zzf.demo.observer;public interface IWatcher { public void registerObserver(Observer observer); public void unregisterObserver(Observer observer); public void notifyAllObserver();}
构建我们观察者的具体的实体类:ThemeWatcher
package com.zzf.demo.observer;import java.util.Vector;public class ThemeWatcher implements IWatcher{ Vector<Observer> veObservers; public ThemeWatcher(){ veObservers = new Vector<>(); } public void registerObserver(Observer observer) { if(null != veObservers){ veObservers.add(observer); } } public void unregisterObserver(Observer observer) { if(null != veObservers){ if(veObservers.contains(observer)){ veObservers.remove(observer); } } } public void notifyAllObserver(){ if(null != veObservers && veObservers.size() != 0){ for(int i = 0; i<veObservers.size() ;i++){ Observer observer = veObservers.get(i); observer.updateUi(); } } } }
被观察的对象的抽象类Observer
package com.zzf.demo.observer;public interface Observer { public void updateUi();}
要观察的对象的实体类UiThemeObserver1
package com.zzf.demo.observer;public class UiThemeObserver1 implements Observer{ @Override public void updateUi() { // TODO Auto-generated method stub System.out.println("刷新UI1的数据"); }}
要观察的对象的实体类UiThemeObserver1
package com.zzf.demo.observer;public class UiThemeObserver2 implements Observer{ @Override public void updateUi() { // TODO Auto-generated method stub System.out.println("刷新界面2的数据"); }}
测试类:TestMain
package com.zzf.demo.observer;public class TestMain { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ThemeWatcher themeWatcher = new ThemeWatcher(); UiThemeObserver1 uiThemeObserver1 = new UiThemeObserver1(); UiThemeObserver2 uiThemeObserver2 = new UiThemeObserver2(); themeWatcher.registerObserver(uiThemeObserver1); themeWatcher.registerObserver(uiThemeObserver2); //触发点 themeWatcher.notifyAllObserver(); // themeWatcher.unregisterObserver(uiThemeObserver2); themeWatcher.unregisterObserver(uiThemeObserver1); }}
当主题在更新的时候,会去通知已经注册的相关界面的观察者,去更新掉那些界面重点一些数据,当然那个还是需要在本demo基础上再进行一些优化的。比如传给每个观察者的都是一个顶层的接口啥的,然后就可以统一去更新,增加一个
//伪代码部分 interface ObserverDisplay{ void display();}伪代码部分class Activity implements ObserverDisplay{ onCreate(){ Uitheme uitheme = new Uitheme(this); } //重写方法 void display(){ }}class Uitheme implements Observer{ ObserverDisplay display; public Uitheme(ObserverDisplay display){ this.display = display; } @Override public void updateUi() { // TODO Auto-generated method stub System.out.println("刷新界面2的数据"); } }从上面我们可以看出,这样就没有必要通过每一个观察的对象都去重新去写一个具体的实体类,而通过一个实体类,就可以观察所有具有相似特征的 一类对象;进而更加的简化了我们的代码
在最后谢谢 大家的观看,写的不好的,或者错误的,请各位看官不腻赐教,不懂的地方,也可以相互交流,这也是在记录自己的成长过程的一种方式,谢谢,欢迎持续访问博客:会有更多精彩的
欢迎继续访问,我的博客
1 0
- java中的观察者模式在android主题切换或者数据刷新时的应用
- 观察者模式在Android中的应用
- 观察者模式在Java编程中的应用
- 观察者模式(Observer)在Android中的应用:
- 观察者模式及在Android源码中的应用
- JAVA观察者模式在安卓中的应用
- Android 应用主题切换
- 观察者模式在项目中的应用
- 观察者模式在安卓中的应用
- 观察者模式在MVP中的应用
- 观察者模式在电话中的应用
- 观察者模式在交易系统中的应用
- 最常用的Java设计之一 观察者模式 在android中的实例 ListView Adapter机制
- 观察者(Observer)模式在Android应用
- 浅学设计模式之观察者<Observer>模式及在android中的应用
- 浅学设计模式之观察者<Observer>模式及在android中的应用 .
- 浅学设计模式之观察者<Observer>模式及在android中的应用
- 浅学设计模式之观察者<Observer>模式及在android中的应用
- 华为OJ:ip地址与整数之间的转换
- python模块RE模块正则表达式
- Android开发去除标题栏title
- Mac下利用Hexo+GitHub搭建自己的博客
- 北理07年复试上机之实现学生类并实现信息一些操作
- java中的观察者模式在android主题切换或者数据刷新时的应用
- 再论“程序员只能做到30岁”
- java问题多线程问题总结
- 左值和右值
- bootstrap排版、
- Android 系统的架构
- 使用MySQL命令行新建用户并授予权限
- 关于Growth Hacker的笔记
- JS基础知识补充和性能优化知识学习(CHROME小技巧)