Android裡的觀察者模式應用
例子:Browser裡有許多Tab,現在比較流行的標籤頁瀏覽。每當Browser的BrowserSettings(公用)發生變化時,會對每一個
Browser的Tab馬上有效。在這裡TAb是觀察者,BrowserSettings是被觀察者。
class BrowserSettings extends Observable { /** * Add a WebSettings object to the list of observers that will be updated * when update() is called. * * @param s A WebSettings object that is strictly tied to the life of a * WebView. */ public Observer addObserver(WebSettings s) { Observer old = mWebSettingsToObservers.get(s); if (old != null) { super.deleteObserver(old); } Observer o = new Observer(s); mWebSettingsToObservers.put(s, o); super.addObserver(o); return o; } /** * Delete the given WebSettings observer from the list of observers. * @param s The WebSettings object to be deleted. */ public void deleteObserver(WebSettings s) { Observer o = mWebSettingsToObservers.get(s); if (o != null) { mWebSettingsToObservers.remove(s); super.deleteObserver(o); } } /* * Package level method for obtaining a single app instance of the * BrowserSettings. */ /*package*/ static BrowserSettings getInstance() { if (sSingleton == null ) { sSingleton = new BrowserSettings(); } return sSingleton; } void update() { setChanged(); notifyObservers(); } /* * An observer wrapper for updating a WebSettings object with the new * settings after a call to BrowserSettings.update(). */ static class Observer implements java.util.Observer { // Private WebSettings object that will be updated. private WebSettings mSettings; Observer(WebSettings w) { mSettings = w; } public void update(Observable o, Object arg) { } }}