確保乙個類只有乙個例項,並且自行例項化並向系統提供這個例項
public
class
singleton
public
static singleton getinstance()
}
這種模式在宣告的時候初始化物件,確保了類的唯一性。這個實現的核心在於構造方法的私有化,使得外部程式不能通過new的方式來構造物件,而singleton類通過乙個靜態方法返回乙個靜態物件。
public
class
singleton
public
static
synchronized singleton getinstance
return sinstance;
}}
synchronized關鍵字就是getinstance的同步方法,多程序情況下保證單例物件唯一性的手段。不過每次呼叫這個方法都會進行同步,這樣會消耗不必要的資源,也是存在的最大問題。一般不建議使用。
dcl方式實現的單例模式的優點是既能夠在需要是才初始化單例,又能夠保證執行緒安全,且單例物件初始化後呼叫getinstance不進行同步鎖。
public
class
singleton
public
static singleton getinstance()
}}return sinstance;
}}
上面**有兩層判斷:第一層判斷是為了避免不必要的同步,第二層判斷是為了在null的情況下建立例項。
dcl模式的優點:資源利用率高,效率高。缺點:第一次載入反應稍慢。
dcl模式是使用單例模式最多的實現。(jdk6以上使用)
public
class
singleton
public
static singleton getinstance (
)private
static
class
singletonholder
}
當第一次載入singleton類是並不會初始化sinstance,只有在第一次呼叫singleton的getinstance方法時才有被初始化。這種方式不僅能保證執行緒安全,也能夠保證單例物件的唯一性,同時也延遲了單例的例項化,為首選的單例實現方式。
單例模式在記憶體只存在乙個例項,減少記憶體開支,特別是乙個物件需要頻繁地建立,銷毀時,單例模式的優勢會特別明顯
減少系統的效能開銷。
避免對資源的多重占用,例如乙個檔案的寫入操作,由於只存在乙個例項在記憶體中,故可以避免對同乙個資源檔案同時進行寫入操作
單例模式可以在全域性設定訪問點,優化和共享資源訪問。例如,可以設計乙個單例類,負責所有資料表的對映操作
單例模式沒有介面,擴充套件很困難,若要擴充套件,除了修改**幾乎沒有第二種途徑可以實現
學習設計模式 單例模式
適用於 優點 缺點 1.懶漢式 public class singleton public static synchronized singleton getinstance return uniqueinstance 2.餓漢式 public class singleton public stat...
設計模式學習 單例模式
單例模式是一種常用的軟體設計模式。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。1.單例模式特點 2.單例模式作用 3.單例模式種類 a.餓漢式 b.懶漢式 c.懶漢式 ...
學習設計模式( ) 單例模式
定義 確保乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。型別 建立類模式 單例模式應該是23種設計模式中最簡單的一種模式了。它有以下幾個要素 單例模式現在主流推薦第一種雙重檢查型。以前流行的有根據例項化物件時機的不同有分為兩種 一種是餓漢式單例,一種是懶漢式單例。餓漢式單例在單例類被載...