Android 中用到的設計模式


文章來源 http://blog.csdn.net/goodlixueyong/article/details/51365294


Android系統使用Java語言進行開發,Android源碼中設計模式的使用無處不在,以至於日常的開發中,也會根據不同的情況直接套用相應的設計模式。閱讀Android源碼的一大樂趣就是可以學習到Google大牛對設計模式的靈活運用。下面就來看一下Android系統都用了哪些常用的設計模式。

  • **模板方法模式**

這應該是我們在Android開發中接觸的比較早的設計模式。新建一個Actiivty時都會覆蓋onCreate、onResume等生命週期方法,這些方法是在父類中定義好的模板,會由系統自動回調,我們可以通過重寫來替換掉這些方法,卻無法改變他們的調用順序。這是典型的模板方法模式。

我們在定義某些類時,常常會在父類中定義一個流程,然後在子類中去重寫這個流程中的一些方法,這也是使用了模板方法模式。

  • 單例模式

Android中最常見的單例是Application類,它全局只有一個。不過Application的構造函數並非是私有的,也就是說我們可以new一個新的Application對象,因此Application這個類並不符合單例的規範。但是,即使我們重新new出來一個Application,它並沒有綁定相關的上下文,也會是無效的,也就保證了全局只有一個有效的Application對象。

Android還有其他典型的單例的例子。比如InputMethodManager的構造函數爲private的,然後定義了靜態的getInstance方法來提供單例對象,這是標準的單例模式的定義方式。

  • 觀察者模式

觀察者模式在Android中無處不在,Android中的各種Listener,單擊、雙擊、觸摸事件的監聽處理,都是觀察者模式。另外ContentObserver、DataSetObserver這些用於數據變化觀察的類也屬於觀察者模式。

  • 代理模式

Android大量使用了代理模式來向用戶層提供系統服務。由於系統服務是運行在單獨的遠程進程中,Android系統通過Binder爲遠程服務提供了代理對象,應用可以通過代理對象來間接的訪問系統服務。比如ActivityManagerService的主要作用是進行Activity的管理,用戶無法直接訪問ActivityManagerService,系統爲我們提供了一個代理對象ActivityManager,通過它就可以獲得ActivityManagerService提供的相關功能。

  • 責任鏈模式

Android中Touch事件的處理機制就符合責任鏈模式依次分發處理事件的特點,請求在各層級View之間依次傳遞,然後判斷是否需要處理還是傳遞給下一級。

  • 享元模式

享元模式用於重複對象的複用,防止頻繁的創建對象。Message的obtainMessage方法可以實現Message對象的重用,以避免大量的Message對象被頻繁的創建和銷燬,Handler也提供了obtainMessage方法實現同樣的功能。因此,在使用Message的時候儘量不要通過new的方式手動去創建。

  • 適配器模式

通過ListView或GridView的Adapter,不同的數據源都可以向同一個ListView或GridView提供數據,Adapter起到的就是適配的功能。

  • 建造者模式

Effective Java裏說,當遇到多個構造器參數時,考慮用建造者模式。建造者模式主要解決構造函數過多的問題。AlertDialog和Notification的構建都是使用的建造者模式,他們都提供了Builder靜態內部類來實現建造過程,而Builder類提供了build方法實現最終對象的創建。

  • 命令模式
Android中兩個典型的使用命令模式的類是Handler和ExecutorService。Handler類提供了post方法發送命令,ExecutorService類通過submit方法提交命令。

  • 原型模式

原型模式主要用來快速克隆出一個與已存在對象相同的新對象。

從java的角度,如果一個類實現了cloneable的clone()方法,那麼它就是原型模式。在Android中,Intent、Bundle類都實現了clone方法。

Intent的實現

@Override
public Object clone() {
return new Intent(this);
} 

Bundle的實現
    @Override  
    public Object clone() {  
        return new Bundle(this);  
    }  







另外,Bitmap中也用到了原型模式。如果我們需要一張Bitmap的幾種不同格式(ARGB_8888、RGB_565等),那我們就可以先創建一個ARGB_8888的Bitmap作爲原型,在它的基礎上,通過調用Bitmap.copy(Config)來創建出其它格式的Bitmap。

  • 備忘錄模式

備忘錄模式主要功能是實現狀態或數據的備份和恢復。那麼,很容易想到在Android中有與它對應的一套機制,即onSaveInstanceState和onRestoreInstanceState,這兩個方法分別實現View或者Activity關鍵狀態的保存和恢復,具體用法相信大家已經很清楚了。

Canvas類中的save和restore兩個方法也是使用了備忘錄模式。

  • 工廠方法模式

工廠方法模式在Android中比較明顯的使用就是BitmapFactory,通過各種decodeXXX()方法就可以用不同方式獲得Bitmap對象。

  • 策略模式

Android通過Animation來實現不同的動畫,Animation可以設置不同的Interpolator,Interpolator就是提供了不同的策略,使得最終的動畫呈現出來不同的效果。


大家經常會遇到的Android中使用的設計模式大概是這麼多。當然Android中用到的設計模式不止這些,大家可以在學習和開發中慢慢去發掘和領悟,而且最好能夠在開發中靈活運用各種設計模式。

關於java中gc的文章 http://blog.csdn.net/tjiyu/article/details/53982412


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章