复制代码
//观察者,需要用到观察者模式的类需实现此接口
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;
}










