設計模式 —— 單例模式

????我們一位很認真負責又和藹可親的老師說過一句話:“現(xiàn)在各種語言技術更新迭代的速度非???,推陳出新。但一些經典的思想不會被時間沖淡,設計模式就是一些經典開發(fā)思想的總結
????所以我們今天來看看設計模式中最常出現(xiàn)的單例模式,希望能給看到這篇文章的朋友能夠有所收獲。

單例模式

????單例模式是我們十分常用的設計模式。我們的生活中就有很多單例模式例子。例如:一份文檔一般只能同時打開一個工作窗口。因為同時寫入容易造成數據被覆蓋,造成不必要的數據丟失。一輛車只有一個司機,不然你們方向盤轉得不一樣的時候汽車該聽誰的呢?

代碼實現(xiàn)

????用經典的Java的代碼實現(xiàn)單例模式;目的:一個類只用一個對象。代碼的要點就3個:

  1. 將構造方法私有化。(不給你瞎搞)
  2. 定義一個 static(類)對象。(返回唯一對象就是你啦)
  3. 定義外部可用的獲取對象的方法。(不給用那不是一個實例的都沒啦?)
單例模式 - 懶漢式

public class Singleton {
    //私有化構造方法,外部無法直接創(chuàng)建對象
    private Singleton(){}
    
    private static Singleton instance;
    
    public static Singleton getInstance(){
        //第一次獲取時才創(chuàng)建
        if (null == instance){
            instance = new Singleton();
        }
        return instance;
}

????根據上面3個要點,我們編寫出這個“單例模式 - 懶漢式”代碼。但這個懶漢式存在多線程安全問題。因為可能同時進入if 判斷。另一個經典的單例模式代碼就是下面的餓漢式代碼。

單例模式-餓漢式

public class Singleton {

    //1.將構造方法私有化,使外部無法直接創(chuàng)建對象
    private Singleton(){}

    //2.創(chuàng)建類的唯一實例
    private static Singleton instance = new Singleton();

    //3.提供獲取實例的方法
    public static Singleton getInstance(){
        return instance;
    }

}

????餓漢模式的唯一實例在類加載時就進行了創(chuàng)建。如此著急,像個餓漢急著找吃的。懶漢呢?你找我的時候我再理你(創(chuàng)建對象)唯一實例的創(chuàng)建時間就是這兩種經典實例的區(qū)別。
????舉個例子,單例模式中許多特點就像是我們選舉班長。真的有很多相似點哦。創(chuàng)建唯一實例 —— 班長只有一個,線程安全問題 —— 有多個同學一起競選。我們學習設計模式是為了學習其中的思想,往往不是具體的代碼實現(xiàn)。所以我們可以多思考在技術,生活中有哪些有單例模式的影子,而單例模式的核心又是什么呢?

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容