android學習日記28--Android中經常使用設計模式總結

1、綜述
  設計模式,根據前人經驗總結出常見軟件工程問題的解決思想套路。GoF一共概括了23種設計模式,固然還有人擴充,不止這些。
設計模式主要利用面嚮對象語言的特性,而android 的設計主要用JAVA語言,有不少地方用到設計模式。android

 

2、設計原則
  設計模式是遵循面向對象設計的五個設計原則來設計的,以下:
1.單一職責原則(SRP)--一個類只能有一個職責,多個職責耦合在一塊兒,會影響複用性。
2.開放封閉原則(OCP)--對擴展是開放的,而對修改是封閉的
3.Liskov替換原則(LSP)--繼承必須確保超類所擁有的性質在子類中仍然成立
4.依賴倒置原則(DIP)--高層次的模塊不該該依賴於低層次的模塊,他們都應該依賴於抽象;抽象不該該依賴於具體,具體應該依賴於抽象。
5.接口隔離原則(ISP)--使用多個專門的接口比使用單一的總接口要好。算法

 

3、常見設計模式
一、單例模式
  最簡單的設計模式,避免在內存中頻繁的實例化因此將它的對象寫成static 靜態 這樣它的對象就只有一份存在靜態內存區使用的時候只需要經過
getInstance()就能夠直接拿到這個靜態對象。經常使用到的好比數據庫管理類DatabaseHelper和輸入法管理類InputMethodManager。數據庫

 1 //餓漢式
 2 class Singleton {
 3 private static Singleton instance=new Singleton();
 4 private Singleton(){}
 5     static Singleton getInstance() {
 6         return instance;
 7     }
 8 }
 9 
10 //懶漢式
11 class Singleton {
12 private static Singleton instance=null;
13 private Singleton(){}
14 static Singleton getInstance() {
15     if(instance==null)
16         instance=new Singleton();
17     return instance;
18 }
19 }    

  餓漢式是線程安全的,懶漢式是線程不安全的,若是要考慮線程,能夠同步代碼塊也能夠同步方法,同步代碼塊是最好的方法canvas

 

二、模板方法設計模式

  經過把不變的的行爲搬移到超類,去除子類中重複的代碼來體現它的優點;當不變的和可變的行爲在子類實現中混合在一塊兒的時候,
不變的行爲就會在子類中重複實現,咱們經過模板方法模式把這些行爲搬移到單一的地方,這樣就能夠幫助子類擺脫重複不變行爲的糾纏。經常使用到的好比View的Draw方法。安全

若是咱們自定義View的話,咱們通常也是重寫onDraw方法便可。ide

 1 public class View{
 2 /**
 3 * 鉤子操做,空實現
 4 */
 5 protected void onDraw(Canvas canvas) {
 6 }
 7 
 8 /**
 9 *鉤子操做,空實現
10 */
11 protected void dispatchDraw(Canvas canvas) {
12 }
13 
14 //算法骨架
15 public void draw(Canvas canvas) {
16 if (!verticalEdges && !horizontalEdges) {
17 // 步驟1
18 if (!dirtyOpaque) onDraw(canvas);
19 
20 // 步驟2
21 dispatchDraw(canvas);
22 
23 // 步驟3
24 onDrawScrollBars(canvas);
25 
26 return;
27     }
28 }
29 //... ...
30 }
31 
32 public class TextView{
33 @Override
34 protected void onDraw(Canvas canvas) {
35 //大量自定義實現代碼
36     }
37 } 

 

三、建造者模式
  將一個複雜對象的構造與它的表示分離,使一樣的構建過程能夠建立不一樣的表示,這樣的設計模式被稱爲建造者模式。
上文講到Dialog主要用到建造者模式。AlertDialog.Builder就是具體建造者,另外,它是以匿名類的方式被建立的,並且,
Builder類是AlertDialog的內部類,這樣,耦合性比較低,這正是面向對象中要達到的設計意圖之一。 最後調用show函數,
它的返回類型正是咱們要建立的產品,即AlertDialog。 因此,Builder(具體建造者)是AlertDialog(產品)的內部匿名類,用來建立並顯示一個dialog。函數

 

四、適配器模式
  把一個類的接口變換成客戶端所期待的另外一種接口,從而使本來不匹配而沒法在一塊兒工做的兩個,類可以在一塊兒工做。
適配器模式分爲類適配器模式和對象適配器模式。ListView用於顯示列表數據,可是做爲列表數據集合有不少形式,
有Array,有Cursor,咱們須要對應的適配器做爲橋樑,處理相應的數據(並能造成ListView所須要的視圖)ui

 

五、觀察者模式
  定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,全部依賴於它的對象都獲得通知並被自動更新。
在ListView中Adapter中favoritesAdapter.registerDataSetObserver(mDataSetObserver);;數據改變以後會自動調用。spa

 

六、and so on

相關文章
相關標籤/搜索