Android單例模式詳解

2021-08-17 16:42:26 字數 2652 閱讀 9401

(1)設計模式定義:design pattern,是一套被反覆使用、多數人知曉的、經過分類編目的、**設計經驗的總結。使用設計模式是為了可重用**、讓**更容易被他人理解、保證**可靠性。毫無疑問,設計模式已於他人於系統都是多贏的;設計模式使**編**正工程化;設計模式是軟體工程的基石脈絡。

(2)設計模式分類:設計模式總體上可以分為三種,即建立型模式、結構型模式、行為型模式,每種又可以具體分出子類,共計23種。今天我們要分析的單例模式就是建立型模式的一種。

(3)建立型模式的**及分類:社會化的分工越來越細,自然在軟體設計方面也是如此,因此物件的建立和物件的使用分開也就成為必然趨勢。因為物件的建立會消耗掉系統很多資源,所以單獨對物件的建立進行研究,從而能夠高效地建立物件就是建立型模式要**的問題。一共有6個建立型模式—簡單工廠模式;工廠方法模式;抽象工廠模式;建立者模式,原型模式;單例模式

(1)單例模式定義:乙個類有且僅有乙個例項,並且自行例項化想整個系統提供。

(2)單例模式關鍵點

①某個類只能有乙個例項;

②它必須自行建立這個示例;

③它必須自行向整個系統提供這個例項。

解決的問題—提供全域性需要使用的,唯一的資料訪問。

(3)單例模式分類

懶漢式-在使用時做判斷,如果需要再建立

餓漢式-在類載入時建立

①上**,具體實現懶漢式

singleton 初始時沒有初始化,只有當第一次調 getinstance() 時才建立例項。

public class singleton   

public static synchronized singleton getinstance()  

return singleton;  

}  };

建構函式用private修飾,外部無法訪問

使用的時候即呼叫getinstance的時候才初始化

static關鍵字修飾,靜態變數,儲存在記憶體中,只有乙份資料。

synchronized執行緒安全,多執行緒情況下單例的唯一性

缺點:沒次呼叫getinstance都會同步一次,浪費資源

②上**,實現餓漢式

類預設先直接初始化乙個例項,以後呼叫 getinstance() 總是返回這個已建立好的例項 

缺點:在沒有必要獲取例項時,已經預先產生了開銷。

public class singleton   

public static singleton getinstance()  

};

建構函式用private修飾,外部無法訪問;

宣告靜態物件時就初始化;

static關鍵字修飾,靜態變數,儲存在記憶體中,只有乙份資料;

final關鍵字,只初始化一次,所以minstance例項只有乙個。

單例執行緒模式執行緒安全問題:

①懶漢式,優點:使用時候才建立,資源節約;缺點:為執行緒安全要付出額外的代價。

②餓漢式,優點:執行緒安全;缺點:過早浪費資源。

實現執行緒安全懶漢式單例模式有三種方法:

上**具體實現:

①加上synchronized,但是每次呼叫例項時都會載入 ;

public static singleton getinstance()   

}  return instance;  

}

②雙重鎖定:只在第一次初始化的時候加上同步鎖

public static singleton getinstance()   

}  }  

return instance;  

}

③內部類實現單例模式 延遲載入,減少記憶體開銷 ;

public class singletoninner  

private singletoninner()

public static singletoninner getinstance()   

}  } ;

建構函式用private修飾,外部無法訪問;

使用的時候即呼叫getinstance的時候才初始化;

呼叫getinstance才回去載入singletioninternalclassholder類,確保了執行緒安全,保證了單例的唯一性。

總結:單例模式是運用最廣泛的設計模式之一,在應用這個模式時,單例模式的類必須保證只有乙個例項存在。多用於整個程式只需要有乙個例項,通常很消耗資源的類,比如執行緒池,快取,網路請求,io操作,訪問資料庫等。由於模擬較耗資源,所以沒必要讓它構造多個例項,這種就是單例模式比較好的使用場景。

推薦使用文中靜態內部類的方式來建立單例模式。

android單例詳解

概念 整個應用中某個類只有乙個例項,自己例項化並且向外提供的一種設計模式 應用場景 當建立乙個物件需要消耗很多資源 比如操作db io流 某種物件的型別有且應該只有乙個 比如獲取全域性context物件 乙個物件需要頻繁的建立銷毀 特點 1,構造方法私有化 2,自己例項化,對外提供獲取例項的方法 餓...

Android單例模式

單例模式singleton 應用場合 有些物件只需要乙個就足夠了,如古代皇帝 老婆 作用 保證整個應用程式中某個例項有且只有乙個 型別 餓漢模式 懶漢模式 public class singleton 2.建立類的唯一例項,使用private static修飾 private static sing...

Android單例模式

參考部落格 1 懶漢模式 每一次呼叫都要對方法進行加鎖,要維護鎖會導致效能損耗,其實不需要每次進入方法都加鎖,只需要第一次進入的時候防止多個執行緒產生多個單例即可。所以只需要在new singleton處加鎖即可,由此引出第二種模式,雙重鎖定模式。2 雙重鎖定模式 第一次生成完例項以後就直接返回例項...