單件模式(Singleton Pattern)

2021-06-23 01:09:57 字數 1267 閱讀 5484

可以說,單件模式是最簡單的模式了,在正式看設計模式之前就知道有這個模式,並且使用過很多次,這次系統學習,發現以前的用法會出現很多問題,是危險的單件模式。

單件模式的優點也是顯而易見的,程式中只有乙個類的物件,避免了記憶體的浪費,同時還可以做到延遲初始化,提高效能。

單件模式:確保乙個類只有乙個例項,並且提供乙個全域性的訪問點。

以前喜歡這麼寫:

private static singleton singleton1;

private singleton(){};

public static singleton getinstance1()

return singleton1;

}

但是這麼寫,在多執行緒實現的時候會出現空指標的問題。所以正確的寫法有下面幾種:

private static singleton singleton2 = new singleton();

private singleton(){};

public static singleton getinstance2()

private static singleton singleton1;

private singleton(){};

public static synchronized singleton getinstance1()

return singleton1;

}

以為只有乙個執行緒能用,降低了效能。

private volatile static singleton singleton3;

private singleton(){};

public static singleton getinstance3()

}} return singleton3;

}

這種方法書用了volatile 關鍵字,這個關鍵字和jvm的內部優化有關係,執行緒可以持有這個物件的拷貝,如果加上這個關鍵字,每次獲取這個變數的時候都是直接從記憶體,避免了不同步的現象。

這種方式,因為只有第一次進入執行緒鎖,所以彌補了同步執行緒的效能問題。

綜上:要注意的點有下面幾個:

1.要重寫構造器變成private型別

2.根據具體的情況確定使用哪種形式的單件模式,如果效能要求不高,對這個類使用的不頻繁,建議第二種方式,否則使用第三種方式。

單件模式(單例模式)

readme 0.1 本文部分描述 head first 設計模式 旨在學習 單件模式 單例模式 的相關知識 及其應用 單件模式 1.0 單件模式的應用背景 有一些物件其實我們只需要乙個,比方說 執行緒池,快取,對話方塊,登錄檔等的物件,這都可以通過單件模式來解決 1.1 定義 確保乙個類只有乙個例...

單件模式(單例模式)

1 單件模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。2 經典的單件模式實現 public class singleton public static singleton getinstance return uniqueinstance 問題點 public static singleto...

單例模式(單件模式)

color red size medium 單件模式,就是確保乙個類只有乙個例項,並提供乙個全域性訪問點。size color 單例的作用是獨一無二,比方說,如果有乙個登錄檔設定的物件,你不希望這樣的物件有多個拷貝吧,那會把設定搞得一團亂,利用像單例這樣的單件物件,可以確保程式中使用的全域性資源只有...