手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >android开发中使用java观察者模式
android开发中使用java观察者模式
摘要:复制代码代码如下://观察者,需要用到观察者模式的类需实现此接口publicinterfaceObserver{voidupdate(Obj...

复制代码 代码如下:

//观察者,需要用到观察者模式的类需实现此接口

public interface Observer {

void update(Object... objs);

}

//被观察者(一个抽象类,方便扩展)

public abstract class Observable {

public final ArrayList<Class<?>> obserList = new ArrayList<Class<?>>();

/** Attach Observer (通过实例注册观察者)

* <b>Notice:</b> ob can't be null ,or it will throw NullPointerException

* */

public <T> void registerObserver(T ob) {

if (ob == null) throw new NullPointerException();

this.registerObserver(ob.getClass());

}

/**

* Attach Observer(通过Class注册观察者)

* @param cls

*/

public void registerObserver(Class<?> cls) {

if (cls == null) throw new NullPointerException();

synchronized(obserList) {

if (!obserList.contains(cls)) {

obserList.add(cls);

}

}

}

/** Unattach Observer (注销观察者)

* <b>Notice:</b>

* <b>It reverses with attachObserver() method</b>

* */

public <T> void unRegisterObserver(T ob) {

if (ob == null) throw new NullPointerException();

this.unRegisterObserver(ob.getClass());

}

/** Unattach Observer(注销观察者,有时候在未获取到实例使用)

* <b>Notice:</b>

* <b>It reverses with attachObserver() method</b>

* */

public void unRegisterObserver(Class<?> cls) {

if(cls == null) throw new NullPointerException();

synchronized(obserList){

Iterator<Class<?>> iterator = obserList.iterator();

while(iterator.hasNext()) {

if(iterator.next().getName().equals(cls.getName())){

iterator.remove();

break;

}

}

}

}

/** detach all observers */

public void unRegisterAll() {

synchronized(obserList) {

obserList.clear();

}

}

/** Ruturn the size of observers */

public int countObservers() {

synchronized(obserList) {

return obserList.size();

}

}

/**

* notify all observer (通知所有观察者,在子类中实现)

* @param objs

*/

public abstract void notifyObservers(Object... objs);

/**

* notify one certain observer (通知某一个确定的观察者)

* @param cls

* @param objs

*/

public abstractvoid notifyObserver(Class<?> cls, Object... objs);

/**

* notify one certain observer

* @param cls

* @param objs

*/

public abstract <T> void notifyObserver(T t, Object... objs);

}

//目标被观察者

public class ConcreteObservable extends Observable {

private static ConcreteObservable instance = null;

private ConcreteObservable() {}

public static synchronized ConcreteObservable getInstance() {

if (instance == null) {

instance = new ConcreteObservable();

}

return instance;

}

@Override

public <T> void notifyObserver(T t, Object... objs) {

// TODO Auto-generated method stub

if (t == null) throw new NullPointerException();

this.notifyObserver(t.getClass(), objs);

}

@Override

public void notifyObservers(Object... objs) {

// TODO Auto-generated method stub

for (Class<?> cls : obserList) {

this.notifyObserver(cls, objs);

}

}

@Override //通过java反射机制实现调用

public void notifyObserver(Class<?> cls, Object... objs) {

// TODO Auto-generated method stub

if (cls == null) throw new NullPointerException();

Method[] methods = cls.getDeclaredMethods();

for (Method method : methods) {

if (method.getName().equals("update")) {

try {

method.invoke(cls, objs);

break;

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

//使用 (实现Observer接口)

public class Text extends Activity implements Observer {

public void onCreate(...) {

ConcreteObservable.getInstance().registerObserver(Text.class);

....

}

//实现接口处理

public void update(Object... objs) {

// 做操作,比如更新数据,更新UI等

}

}

【android开发中使用java观察者模式】相关文章:

android WebView组件使用总结

Android开发中如何获取应用版本号

Android Mms之:PDU的使用详解

Android Service中方法使用详细介绍

Android实现发短信/彩信功能

Android开发笔记 Handler使用总结

Android开发之文件操作模式深入理解

Android 编程下字库的使用及注意事项

Android开发之电源管理

Android开发:14个解决实际问题的代码片段

精品推荐
分类导航