Android之Observer和Observable
阿新 • • 發佈:2019-01-09
package java.util; public class Observable { private boolean changed = false; private final ArrayList<Observer> observers; public Observable() { observers = new ArrayList<>(); } public synchronized void addObserver(Observer o) { if (o == null) throw newNullPointerException(); if (!observers.contains(o)) { observers.add(o); } } public synchronized void deleteObserver(Observer o) { observers.remove(o); } public void notifyObservers() { notifyObservers(null); } public void notifyObservers(Object arg) {Observer[] arrLocal;synchronized (this) {if (!hasChanged()) return;arrLocal = observers.toArray(new Observer[observers.size()]); clearChanged(); } for (int i = arrLocal.length-1; i>=0; i--) arrLocal[i].update(this, arg); } public synchronized void deleteObservers() { observers.clear(); } protected synchronized void setChanged() { changed = true; } protected synchronized void clearChanged() { changed = false; } public synchronized boolean hasChanged() { return changed; } public synchronized int countObservers() { return observers.size(); } }