天天看點

Android涉及到的設計模式

轉載位址:http://blog.csdn.net/dengshengjin2234/article/details/8502097

1、擴充卡模式:ListView或GridView的Adapter

簡介:不同的資料提供者使用一個擴充卡來向一個相同的客戶提供服務。

2、建造者模式:AlertDialog.Builder

簡介:可以分步地構造每一部分。

3、指令模式:Handler.post後Handler.handleMessage

簡介:把請求封裝成一個對象發送出去,友善定制、排隊、取消。

4、享元模式:Message.obtainMessage通過重用Message對象來避免大量的Message對象被頻繁的建立和銷毀。

簡介:運用共享技術有效地支援大量細粒度的對象。

5、疊代器模式:如通過Hashtable.elements方法可以得到一個Enumeration,然後通過這個Enumeration通路Hashtable中的資料,而不用關心Hashtable中的資料存放方式。

簡介:提供一個方法順序通路資料集合中的所有資料而又不暴露對象的内部表示。

6、備忘錄模式:Activity的onSaveInstanceState和onRestoreInstanceState就是通過Bundle這種序列化的資料結構來存儲Activity的狀态,至于其中存儲的資料結構,這兩個方法不用關心

簡介:不需要了解對象的内部結構的情況下備份對象的狀态,友善以後恢複。

7、觀察者模式:我們可以通過BaseAdapter.registerDataSetObserver和 BaseAdapter.unregisterDataSetObserver兩方法來向BaseAdater注冊、登出一個 DataSetObserver。這個過程中,DataSetObserver就是一個觀察者,它一旦發現BaseAdapter内部資料有變量,就會通 過回調方法DataSetObserver.onChanged和DataSetObserver.onInvalidated來通知 DataSetObserver的實作類。事件通知也是觀察者模式

簡介:一個對象發生改變時,所有信賴于它的對象自動做相應改變。

8、原型模式:比如我們需要一張Bitmap的幾種不同格式:ARGB_8888、RGB_565、ARGB_4444、ALAPHA_8等。那我 們就可以先建立一個ARGB_8888的Bitmap作為原型,在它的基礎上,通過調用Bitmap.copy(Config)來建立出其它幾種格式的 Bitmap。另外一個例子就是Java中所有對象都有的一個名字叫clone的方法,已經原型模式的代名詞了

簡介:在系統中要建立大量的對象,這些對象之間具有幾乎完全相同的功能,隻是在細節上有一點兒差别。

9、代理模式:類似于ios開發的delegate委托模式,所有的AIDL都一個代理模式的例子。假設一個Activity A去綁定一個Service S,那麼A調用S中的每一個方法其實都是通過系統的Binder機制的中轉,然後調用S中的對應方法來做到的。Binder機制就起到了代理的作用。

簡介:為其他對象提供一種代理以控制對這個對象的通路。

10、狀态模式:View.onVisibilityChanged方法,就是提供了一個狀态模式的實作,允許在View的visibility發生改變時,引發執行onVisibilityChanged方法中的動作。

簡介:狀态發生改變時,行為改變。

11、政策模式:

舉例:Java.util.List就是定義了一個增(add)、删(remove)、改(set)、查(indexOf)政策,至于實作這個政策 的ArrayList、LinkedList等類,隻是在具體實作時采用了不同的算法。但因為它們政策一樣,不考慮速度的情況下,使用時完全可以互相替換 使用。

簡介:定義了一系列封裝了算法、行為的對象,他們可以互相替換。

12、調解者模式

簡介:一個對象的某個操作需要調用N個對象的M個方法來完成時,把這些調用過程封裝起來,就成了一個調解者

舉例:如Resource.getDrawable方法的實作邏輯是這樣的:建立一個緩存來存放所有已經加載過的,如果getDrawable中傳 入的id所對應的Drawable以前沒有被加載過,那麼它就會根據id所對應的資源類型,分别調用XML解析器生成,或者通過讀取包中的圖檔資源檔案來 建立Drawable。

而Resource.getDrawable把涉及到多個對象、多個邏輯的操作封裝成一個方法,就實作了一個調解者的角色。

13、抽象工廠模式

DAO與Service的使用

本文轉自demoblog部落格園部落格,原文連結http://www.cnblogs.com/0616--ataozhijia/p/3718337.html如需轉載請自行聯系原作者

demoblog