每天一個(gè)設(shè)計(jì)模式

1.單例模式

  • 懶漢式,線程不安全

    這種方式是最基本的實(shí)現(xiàn)方式,這種實(shí)現(xiàn)最大的問(wèn)題就是不支持多線程。

因?yàn)闆](méi)有加鎖 synchronized,所以嚴(yán)格意義上它并不算單例模式。

    這種方式 lazy loading 很明顯,不要求線程安全,在多線程不能正常工作。 

  • 懶漢式,線程安全

    這種方式具備很好的 lazy loading,能夠在多線程中很好的工作,但是,效率很低,

99% 情況下不需要同步。

優(yōu)點(diǎn) :第一次調(diào)用才初始化,避免內(nèi)存浪費(fèi)。

缺點(diǎn):必須加鎖 synchronized 才能保證單例,但加鎖會(huì)影響效率。getInstance() 的性能

對(duì)應(yīng)用程序不是很關(guān)鍵(該方法使用不太頻繁)。 

  • 餓漢式

描述:這種方式比較常用,但容易產(chǎn)生垃圾對(duì)象。

優(yōu)點(diǎn):沒(méi)有加鎖,執(zhí)行效率會(huì)提高。

缺點(diǎn):類(lèi)加載時(shí)就初始化,浪費(fèi)內(nèi)存。它基于 classloder 機(jī)制避免了多線程的同步問(wèn)題,

不過(guò),instance 在類(lèi)裝載時(shí)就實(shí)例化,雖然導(dǎo)致類(lèi)裝載的原因有很多種,在單例模式中大多

數(shù)都是調(diào)用 getInstance 方法, 但是也不能確定有其他的方式(或者其他的靜態(tài)方法)

導(dǎo)致類(lèi)裝載,這時(shí)候初始化 instance 顯然沒(méi)有達(dá)到 lazy loading 的效果。 

  • 雙檢鎖/雙重校驗(yàn)鎖(DCL,即 double-checked locking)

描述:這種方式采用雙鎖機(jī)制,安全且在多線程情況下能保持高性能。

getInstance() 的性能對(duì)應(yīng)用程序很關(guān)鍵。


public class Singleton { 

    private volatile static Singleton singleton; 

    private Singleton (){}

    public static Singleton getSingleton() { 

        if (singleton == null) { 

            synchronized (Singleton.class) {

                 if (singleton == null) { 

                    singleton = new Singleton(); 

                 } 

             }

        } 

    return singleton; 

    } 

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 摘要:人人都會(huì)設(shè)計(jì)模式系統(tǒng)宗旨是以簡(jiǎn)潔明了方式讓你明白設(shè)計(jì)模式,本文介紹了單例設(shè)計(jì)模式,你真的全方位了解過(guò)單例模式...
    暖夏未眠丶閱讀 833評(píng)論 0 2
  • 1.單例模式概述 (1)引言 單例模式是應(yīng)用最廣的模式之一,也是23種設(shè)計(jì)模式中最基本的一個(gè)。本文旨在總結(jié)通過(guò)Ja...
    曹豐斌閱讀 3,072評(píng)論 6 47
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載 PS:轉(zhuǎn)載請(qǐng)注明出處作者: TigerChain地址: htt...
    TigerChain閱讀 1,390評(píng)論 0 3
  • 單例模式(Singleton Pattern)是 編程語(yǔ)言中最簡(jiǎn)單的設(shè)計(jì)模式之一。這種類(lèi)型的設(shè)計(jì)模式屬于創(chuàng)建型模式...
    Hi夜城閱讀 527評(píng)論 1 10
  • 單例模式(Singleton Pattern)是眾多設(shè)計(jì)模式中較為簡(jiǎn)單的一個(gè),同時(shí)它也是面試時(shí)經(jīng)常被提及的問(wèn)題,如...
    廖少少閱讀 651評(píng)論 0 1

友情鏈接更多精彩內(nèi)容