package skin.support.observe; import java.util.ArrayList; /** * Created by ximsfei on 2017/1/10. */ public class SkinObservable { private final ArrayList<SkinObserver> observers; public SkinObservable() { observers = new ArrayList<>(); } public synchronized void addObserver(SkinObserver o) { if (o == null) throw new NullPointerException(); if (!observers.contains(o)) { observers.add(o); } } public synchronized void deleteObserver(SkinObserver o) { observers.remove(o); } public void notifyUpdateSkin() { notifyUpdateSkin(null); } public void notifyUpdateSkin(Object arg) { SkinObserver[] arrLocal; synchronized (this) { arrLocal = observers.toArray(new SkinObserver[observers.size()]); } for (int i = arrLocal.length-1; i>=0; i--) arrLocal[i].updateSkin(this, arg); } public synchronized void deleteObservers() { observers.clear(); } public synchronized int countObservers() { return observers.size(); } }