????我們一位很認真負責又和藹可親的老師說過一句話:“現(xiàn)在各種語言技術更新迭代的速度非???,推陳出新。但一些經典的思想不會被時間沖淡,設計模式就是一些經典開發(fā)思想的總結”
????所以我們今天來看看設計模式中最常出現(xiàn)的單例模式,希望能給看到這篇文章的朋友能夠有所收獲。
單例模式
????單例模式是我們十分常用的設計模式。我們的生活中就有很多單例模式例子。例如:一份文檔一般只能同時打開一個工作窗口。因為同時寫入容易造成數據被覆蓋,造成不必要的數據丟失。一輛車只有一個司機,不然你們方向盤轉得不一樣的時候汽車該聽誰的呢?
代碼實現(xiàn)
????用經典的Java的代碼實現(xiàn)單例模式;目的:一個類只用一個對象。代碼的要點就3個:
- 將構造方法私有化。(不給你瞎搞)
- 定義一個 static(類)對象。(返回唯一對象就是你啦)
- 定義外部可用的獲取對象的方法。(不給用那不是一個實例的都沒啦?)
單例模式 - 懶漢式
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)。所以我們可以多思考在技術,生活中有哪些有單例模式的影子,而單例模式的核心又是什么呢?