Android設(shè)計模式之單例模式詳解
單例模式
一個類只有一個實例,并且可以全局訪問使用
應(yīng)用場景
如賬戶管理類,數(shù)據(jù)庫操作類等(某個對象頻繁被訪問使用)
常用方式
餓漢式
懶漢式
同步加鎖
DCL雙重加鎖驗證
靜態(tài)內(nèi)部類
枚舉單例
餓漢式
加載類的同時立即進(jìn)行初始化操作,對資源消耗很大
public class SingleTest {
public static final SingleTest singleTest1=new SingleTest();
public SingleTest() {
}
public static SingleTest getSingleTest1(){
return singleTest1;
}
}
懶漢式
優(yōu)點:需要使用時候才進(jìn)行初始化加載
缺點:線程不安全,在多線程中很容易出現(xiàn)不同步的情況
public class SingleTest1 {
private static SingleTest1 instance=null;
public SingleTest1() {
}
public static SingleTest1 getInstance(){
if(instance==null){
instance=new SingleTest1();
}
return instance;
}
}
同步加鎖
優(yōu)點:解決線程安全問題
缺點:每次實例需要判斷加鎖狀態(tài),效率低下
public class SingleTest2 {
private static SingleTest2 instance=null;
public SingleTest2() {
}
public static synchronized SingleTest2 getInstance(){
if(instance==null){
instance=new SingleTest2();
}
return instance;
}
}
DCL雙重校驗
優(yōu)點:并發(fā)不高的情況下可以完美運行(推薦使用,客戶端幾乎不存在高并發(fā)情況)
缺點:JDK1.5以前可能會出現(xiàn)instance為初始化的問題(現(xiàn)在的Android幾乎都是1.7 1.8了幾乎可以略率此問題)
public class SingleTest4 {
private static SingleTest4 instance=null;//靜態(tài)變量
public SingleTest4() {
}
public static SingleTest4 getInstance(){
if (instance == null) {//第一層校驗
synchronized (SingleTest4.class) {
if (instance == null) {//第二層校驗
instance = new SingleTest4();
}
}
}
return instance;
}
}
靜態(tài)內(nèi)部類
優(yōu)點:延遲加載,線程安全,內(nèi)存消耗少(推薦使用)
public class SingleTest5 {
private SingleTest5() {
}
public static final SingleTest5 getInstance() {
return SingletonHolder.INSTANCE;
}
//定義的靜態(tài)內(nèi)部類
private static class SingletonHolder {
private static final SingleTest5 INSTANCE = new SingleTest5(); //創(chuàng)建實例的地方
}
}
枚舉單例
優(yōu)點:線程安全,防反序列化,防反射,寫法簡單
public enum SingleTest6 {
//第一種方式
// INSTANCE;
// private CaiPiao instance;
//
// SingleTest6() {
// instance = new CaiPiao();
// }
//
// public CaiPiao getInstance() {
// return instance;
// }
//
// class CaiPiao {
//
// }
//第二種方式
INSTANCE2{
@Override
protected void CaiPiao() {
System.out.println("彩票");
}
};
protected abstract void CaiPiao();
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
總結(jié)Android App內(nèi)存優(yōu)化之圖片優(yōu)化
網(wǎng)上有很多大拿分享的關(guān)于Android性能優(yōu)化的文章,主要是通過各種工具分析,使用合理的技巧優(yōu)化APP的體驗,提升APP的流暢度,但關(guān)于內(nèi)存優(yōu)化的文章很少有看到。下面是我在實踐過程中使用的一些方法,很多都是不太成熟的項目,只是將其作為一種處理方式分享給大家。2016-08-08
Android 如何實現(xiàn)exclude aar包中的某個jar包
這篇文章主要介紹了Android 如何實現(xiàn)exclude aar包中的某個jar包,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制
這篇文章主要為大家介紹了Android系統(tǒng)狀態(tài)欄定制圖標(biāo)顯示邏輯控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Activity取消界面切換的默認(rèn)動畫方法(推薦)
下面小編就為大家?guī)硪黄狝ctivity取消界面切換的默認(rèn)動畫方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
Android webview 遇到android.os.FileUriExposedException錯誤解決辦法
這篇文章主要介紹了Android webview 遇到android.os.FileUriExposedException錯誤解決辦法的相關(guān)資料,希望通過本文能幫助到大家,讓大家遇到這樣的問題解決,需要的朋友可以參考下2017-10-10

