android观察者模式使用,android开发中使用java观察者模式

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

public interface Observer {

void update(Object... objs);

}

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

public abstract class Observable {

public final ArrayList> obserList = new ArrayList>();

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

* Notice: ob can't be null ,or it will throw NullPointerException

* */

public 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 (注销观察者)

* Notice:

* It reverses with attachObserver() method

* */

public void unRegisterObserver(T ob) {

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

this.unRegisterObserver(ob.getClass());

}

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

* Notice:

* It reverses with attachObserver() method

* */

public void unRegisterObserver(Class> cls) {

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

synchronized(obserList){

Iterator> 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 abstract void notifyObserver(Class> cls, Object... objs);

/**

* notify one certain observer

* @param cls

* @param objs

*/

public abstract 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 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等

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值