單例模式是一種常用的軟體設計模式。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。
1.單例模式特點
2.單例模式作用
3.單例模式種類
a.餓漢式
b.懶漢式
c.懶漢式 - 同步方法
d.懶漢式 - 雙重檢測
e.懶漢式 - 內部類
單例模式 - 餓漢式
/**
* 餓漢式單例模式
* 優點:執行緒安全
* 缺點:在載入類的時候就例項化物件,浪費資源,沒有延遲載入
*@author long
* */
public
class
singleton1
public
static singleton1 getinstance()
}
懶漢式單例模式
/**
* 懶漢式單例模式
* 優點:類初始化不直接載入
* 缺點:多執行緒不安全,當兩個執行緒同時檢查到singleton為空,則都進行例項化
*@author long
* */
public
class
singleton2
public
static singleton2 getinstance()
return singleton;
}}
懶漢式-方法同步
/**
* 懶漢式-方法同步
* 優點:執行緒安全
* 缺點:對方法進行了同步,每次呼叫getinstance方法都對鎖進行了判斷,比較耗時
*@author long
* */
public
class
singleton3
public
static
synchronized singleton3 getinstance()
return singleton;
}}
懶漢式 - 雙重檢查
/**
* 懶漢式 - 雙重檢查
* 優點:雙重檢測有效地避免了資源浪費的情況,只有在第一次呼叫getinstance()方法時才會初始化,不用每次都判斷鎖狀態
* 缺點:多執行緒中仍然不安全
* 例如:多執行緒的涉入可能會導致instance還沒有初始化完成就被當做完整的例項返回給了應用程式了。也就是說執行緒1正在例項化instance,
執行緒2執行到1這個位置發現instance不為空,那麼按程式的流程就應該返回instance,但是這個時候的instance還未被例項化完成。
*@author long
* */
public
class
singleton4
public
static singleton4 getinstance()}}
return instance;
}}
懶漢式 - 內部類
/**
* 懶漢式 - 內部類
* 優點:實現了延時載入,沒有在類被載入的時候就去例項化物件。
*@author long
* */
public
class
singleton5
private
static singleton5 getinstance()
private
static
class
singletonholder
}
學習設計模式 單例模式
適用於 優點 缺點 1.懶漢式 public class singleton public static synchronized singleton getinstance return uniqueinstance 2.餓漢式 public class singleton public stat...
學習設計模式( ) 單例模式
定義 確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。型別 建立類模式 單例模式應該是23種設計模式中最簡單的一種模式了。它有以下幾個要素 單例模式現在主流推薦第一種雙重檢查型。以前流行的有根據例項化物件時機的不同有分為兩種 一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被載...
設計模式學習 單例模式
有次面試的時候直接 了,其中乙個問題是要我說單例模式的實現方式。當時直接答了懶漢和餓漢模式,然後又被問有沒有其他方式,效率會更高些的,簡直一臉的懵逼,回去後查了下,確實還有別的。什麼是單例?單例就是確保乙個類只有乙個例項,而且自行例項化,並向系統提供這個例項。單個例還可以擴充套件,就是多例模式。有些...