定義:
單例模式:確保某一個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。
單例模式其他方式:
1、懶漢模式:聲明一個靜態(tài)對象,并且在用戶第一次調(diào)用getInstance時進行初始化,在getInstance()方法中添加了synchronized關(guān)鍵字,實現(xiàn)該方法的同步管理,特別是在多線程情況下,防止重復(fù)初始化。
該模式優(yōu)點:單例只有在使用時才被實例化,節(jié)省資源;缺點:第一次加載實例化,反應(yīng)慢,最大問題是每次調(diào)用getInstance()方法都需要同步,造成不必要的同步開銷。
2、Double Check Lock(DCL雙重檢查鎖定)
DCL方式實現(xiàn)單例模式優(yōu)點是,既能夠在需要時才初始化單例,又能保證線程安全,并且單例對象初始化后調(diào)用getInstance()方法不進行同步鎖。
該實現(xiàn)方式最大的優(yōu)點在于getInstance()方法上,針對于instance對象進行了兩次驗證是否為NULL;這兩種判斷主要做了三件事情:
(1)給Singleton實例對象分配內(nèi)存(2)調(diào)用Singleton的構(gòu)造函數(shù),初始化成員字段(3)將instance對象指向分配的內(nèi)存空間;
3、靜態(tài)內(nèi)部類單例模式
在Singleton類中聲明一個靜態(tài)內(nèi)部類,靜態(tài)類里實現(xiàn)單例對象的實例化,這樣既可以確保線程安全,也可保證單例對象唯一性,同時延遲單例的實例化,這是比較推薦的一種方式。
單例模式優(yōu)點:減少內(nèi)存開支,避免資源浪費,常住內(nèi)存,實現(xiàn)全局數(shù)據(jù)管理和共享;
單例模式缺點:擴展難,如果在Android中持有Context,容易造成內(nèi)存泄漏,最好使用Application Context;
單例模式的優(yōu)勢
1、單例模式只有一個實例,減少了內(nèi)存開銷。
2、單例模式可以避免資源的多重占用(避免對同一個文件同時操作)
3、可以再系統(tǒng)設(shè)置全局的訪問點,優(yōu)化和共享資源訪問。