設計模式學習-單例模式

確保一個類只有一個實例,并且自行實例化并向系統(tǒng)提供這個實例

關鍵點

  • 構造方法不對外開發(fā)吏夯,構造方法私有化
  • 通過一個靜態(tài)方法或者枚舉返回對象
  • 確保單例類的對象有且只有一個震檩,尤其在多線程環(huán)境下
  • 反序列化時不會重新構造對象

餓漢模式

public class Singleton{
    private static final mSingleton = new Singleton();
    private Singleton(){}
    
    public static Singleton getInstance(){
        return mSingleton;
    }
}

這種模式在聲明的時候初始化對象,確保了類的唯一性善镰。這個實現(xiàn)的核心在于構造方法的私有化是目,使得外部程序不能通過new的方式來構造對象谤饭,而Singleton類通過一個靜態(tài)方法返回一個靜態(tài)對象。

懶漢模式

public class Singleton {
    private static Singleton sInstance;
    private Singleton () {}
    
    public static synchronized Singleton getInstance {
        if(sInstance == null) {
            sInstance = new Singleton();
        }
        return sInstance;
    }
}

synchronized關鍵字就是getInstance的同步方法,多進程情況下保證單例對象唯一性的手段揉抵。不過每次調用這個方法都會進行同步亡容,這樣會消耗不必要的資源,也是存在的最大問題冤今。一般不建議使用闺兢。

Double Check Lock(DCL)模式

DCL方式實現(xiàn)的單例模式的優(yōu)點是既能夠在需要是才初始化單例,又能夠保證線程安全戏罢,且單例對象初始化后調用getInstance不進行同步鎖屋谭。

public class Singleton {
    private static Singleton sInstance = null;
    private Singleton(){}
    public static Singleton getInstance(){
        if(sInstance == null){
            synchronized(Singleton.class){
                if(sInstance == null) {
                    sInstance = new Singleton();
                }
            }
        }
        return sInstance;
    }
}

上面代碼有兩層判斷:第一層判斷是為了避免不必要的同步,第二層判斷是為了在null的情況下創(chuàng)建實例龟糕。
DCL模式的優(yōu)點:資源利用率高桐磁,效率高。缺點:第一次加載反應稍慢讲岁。

DCL模式是使用單例模式最多的實現(xiàn)我擂。(jdk6以上使用)

靜態(tài)內部類單例模式

public class Singleton {
    private Singleton () {}
    public static Singleton getInstance () {
        return SingletonHolder.sInstance;
    }
    
    private static class SingletonHolder {
        private static final Singleton sInstance = new Singleton();
    }
}

當?shù)谝淮渭虞dSingleton類是并不會初始化sInstance,只有在第一次調用Singleton的getInstance方法時才有被初始化缓艳。這種方式不僅能保證線程安全校摩,也能夠保證單例對象的唯一性,同時也延遲了單例的實例化阶淘,為首選的單例實現(xiàn)方式衙吩。

優(yōu)點

  1. 單例模式在內存只存在一個實例,減少內存開支舶治,特別是一個對象需要頻繁地創(chuàng)建分井,銷毀時,單例模式的優(yōu)勢會特別明顯
  2. 減少系統(tǒng)的性能開銷霉猛。
  3. 避免對資源的多重占用,例如一個文件的寫入操作珠闰,由于只存在一個實例在內存中惜浅,故可以避免對同一個資源文件同時進行寫入操作
  4. 單例模式可以在全局設置訪問點,優(yōu)化和共享資源訪問伏嗜。例如坛悉,可以設計一個單例類,負責所有數(shù)據(jù)表的映射操作

缺點

  1. 單例模式沒有接口承绸,擴展很困難裸影,若要擴展,除了修改代碼幾乎沒有第二種途徑可以實現(xiàn)
  2. 單例模式如果持有Context军熏,很容易出現(xiàn)內存泄漏轩猩,此時傳遞給單例對象的Context最好是Application Context.
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子均践,更是在濱河造成了極大的恐慌晤锹,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彤委,死亡現(xiàn)場離奇詭異鞭铆,居然都是意外死亡,警方通過查閱死者的電腦和手機焦影,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門车遂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斯辰,你說我怎么就攤上這事舶担。” “怎么了椒涯?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵柄沮,是天一觀的道長。 經常有香客問我废岂,道長祖搓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任湖苞,我火速辦了婚禮拯欧,結果婚禮上,老公的妹妹穿的比我還像新娘财骨。我一直安慰自己镐作,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布隆箩。 她就那樣靜靜地躺著该贾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捌臊。 梳的紋絲不亂的頭發(fā)上杨蛋,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音理澎,去河邊找鬼逞力。 笑死,一個胖子當著我的面吹牛糠爬,可吹牛的內容都是我干的寇荧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼执隧,長吁一口氣:“原來是場噩夢啊……” “哼揩抡!你這毒婦竟也來了户侥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捅膘,失蹤者是張志新(化名)和其女友劉穎添祸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寻仗,經...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡刃泌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了署尤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耙替。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖曹体,靈堂內的尸體忽然破棺而出俗扇,到底是詐尸還是另有隱情,我是刑警寧澤箕别,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布铜幽,位于F島的核電站,受9級特大地震影響串稀,放射性物質發(fā)生泄漏除抛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一母截、第九天 我趴在偏房一處隱蔽的房頂上張望到忽。 院中可真熱鬧,春花似錦清寇、人聲如沸喘漏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翩迈。三九已至,卻和暖如春盔夜,著一層夾襖步出監(jiān)牢的瞬間帽馋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工比吭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姨涡。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓衩藤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涛漂。 傳聞我的和親對象是個殘疾皇子赏表,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容

  • 每個人都有夢想检诗,我也一樣,我夢想有一天瓢剿,可以周游世界逢慌,夢想有一天,可以不為最不值錢的錢而擔憂间狂。我也可以財富自由攻泼。當...
    宋不走閱讀 468評論 0 0
  • 一個普通的廣告,是廣而告之鉴象。一個好的廣告忙菠,是攻心為上。
    每天學習一點點閱讀 55評論 0 0
  • 一纺弊、人不可貌相 連字都不認識的蒙古軍在人的第一印象里總是有勇無謀牛欢,肯定比不過受過系統(tǒng)軍事理論培訓的元軍,可...
    桃拾壹閱讀 446評論 2 1