android開發中使用到的一些設計者模式

fi940959 7年前發布 | 4K 次閱讀 安卓開發 Android開發 移動開發

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的使用

 

來自:http://blog.csdn.net/xiangzhihong8/article/details/28593827

 

 本文由用戶 fi940959 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!