設計模式之單例模式

在寫Spring Boot 2.0.2-webmvc源碼分析系列的文章時,當時提到了Servlet單例模式。所以就想著寫一篇文章來介紹以下單例模式,其實網(wǎng)上類似這種設計模式的文章很多,23種設計模式大家可能都看過,早些時候自己也都看過,基本上只對常用的幾種印象比較深刻,其余不常用的差不多都忘記了。既然提到了單例模式,那就仔細介紹一下。再加深一下印象。

單例模式定義:

單例模式,屬于創(chuàng)建類型的一種常用的軟件設計模式。通過單例模式的方法創(chuàng)建的類在當前進程中只有一個實例。

我覺得學習設計模式,主要可以從以下四個方面著手。

1、該設計模式的一般使用場景。
2、該設計模式的實現(xiàn)。
3、該設計模式主要解決的問題及優(yōu)點。
4、該設計模式的不足之處。

單例模式的一般使用場景,下面列舉常見的幾種:

1、一般的應用系統(tǒng)都有一個或多個屬性文件存放系統(tǒng)配置,這樣的應用可以使用一個單例對象來管理這些屬性文件 。
2、 網(wǎng)站的計數(shù)器,一般可以使用單例模式實現(xiàn),不然數(shù)據(jù)很難同步。
3、系統(tǒng)的日志應用,一般可以使用單例模式實現(xiàn),由于共享的日志文件一直處于打開狀態(tài),因為只能有一個實例去操作,否則內(nèi)容不好追加。
4、應用的配置信息讀取,一般也使用單例模式,由于配置文件是共享的資源。為了保證數(shù)據(jù)的唯一性,可以使用單例對象進行獲取。
5、線程池的設計一般也是采用單例模式,由于線程池要對池中的線程進行控制。

下面簡單列舉一下使用單例模式的優(yōu)點。

1、 由于單例模式在內(nèi)存中只有一個實例,所以一定程度上可以減少內(nèi)存消耗,特別是一個對象需要頻繁地創(chuàng)建銷毀時,會影響系統(tǒng)的性能,使用單例模式就非常明顯了。
2、由于單例模式只生成一個實例,當一個對象實例需要比較多的資源時,如讀取配置信息,則可以通過在應用啟動時直接產(chǎn)生一個單例對象,然后放入內(nèi)存的方式來優(yōu)化。
3、單例模式可以避免對資源的多重占用,例如一個寫文件操作,由于只有一個實例存在內(nèi)存中,避免對同一個資源文件的同時寫操作。
4、單例模式可以在系統(tǒng)設置全局的訪問點,優(yōu)化和共享資源訪問。

除了優(yōu)點之外,當然也還有一些不足:

1、單例模式?jīng)]有接口,如果需要擴展,每次都得改代碼。
2、使用的場景比較單調(diào),如果是在多場景不斷變化的實例對象最好不要使用單例,數(shù)據(jù)容易出問題。

下面簡單介紹以下實現(xiàn)方式,單例模式的實現(xiàn)方式有多種,不同的實現(xiàn)方式有不同的優(yōu)缺點,這里介紹一種生產(chǎn)環(huán)境中常用的實現(xiàn)方式(靜態(tài)內(nèi)部類實現(xiàn)),其它幾種方式也不建議使用,所以就不一一列舉了,掌握下面這種就夠用了。

public class Singleton {
    
    private Singleton() { }
    
    public static Singleton getInstance(){
        return SingletonInstance.INSTANCE;
    }
    
    private static class SingletonInstance{
        static Singleton INSTANCE = new Singleton();
    }
}

使用上面這種單例模式的好處可以保證以下幾點

1、Singleton最多只有一個實例,前提是在不考慮反射突破訪問限制的情況下。
2、保證了即使在高并發(fā)情況下,也不會產(chǎn)生多個實例。
3、保證了在高并發(fā)情況下,不會訪問到未初始化完成的對象造成系統(tǒng)異常問題。

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

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

  • 概述 單例模式是應用最廣的模式之一,在應用這個模式時,單例對象的類必須保證只有一個實例存在。許多時候整個系統(tǒng)只需要...
    劉滌生閱讀 1,094評論 0 5
  • 單例模式(Singleton Pattern)是最簡單的一種設計模式。下面讓我們開始學習單例模式。 一、基本介紹 ...
    冰鑒IT閱讀 1,178評論 1 19
  • 一.什么是單例模式 單例模式的定義:確保一個類只有一個實例,并提供一個訪問他的全局訪問點。單例模式是幾個設計模式中...
    Geeks_Liu閱讀 2,327評論 0 10
  • 1 單例模式的定義 定義:確保某一個類只有一個實例,自行實例化并且向整個系統(tǒng)提供這個實例。單例模式的通用類圖如下所...
    Jerry_1116閱讀 896評論 0 0
  • 之前在開發(fā)中老用到一些設計模式可是呢又不是很懂,于是狠下心來琢磨一番。下面是我琢磨后總結(jié)的,希望對您有用。如果發(fā)現(xiàn)...
    于闐閱讀 2,907評論 2 5

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