Java單例設計模式
一、什麼是單例設計模式
單例設計模式,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在一個物件範例,並且該類只提供一個取得其物件範例的方法。
二、如何應用單例設計模式
根據定義,一個類只能存在一種物件範例,所以我們需將類的構造存取許可權設定成private,只能在類內進行操作。因為在類的外部開始還無法得到類的物件,只能呼叫該類的某個靜態方法以返回類內部建立的物件, 靜態方法只能存取類中的靜態成員變數,所以,指向類內部產生的該類物件的變數也必須定義成靜態的。
三、單例設計模式的分類
a.餓漢式
① 私有化類的構造器
②內部建立類的物件
③要求此物件必須宣告為靜態
④提供公共的靜態方法,返回當前類的物件
class Singleton{
//私有化類的構造器
private Singleton() {
}
//內部提供當前類的範例
//此範例必須靜態化
private static Singleton single = new Singleton();
//提供公共的靜態方法,返回當前類的物件
public static Singleton getSingleton() {
return single;
}
}
b.懶漢式
①私有化類的構造器
②宣告當前類物件,沒有初始化
③此物件也必須宣告沒static
④提供靜態的方法,返回當前類的物件
class Singleton{
//私有化類的構造器
private Singleton() {
}
//內部提供當前類的範例
//此範例必須靜態化
private static Singleton single ;
//提供公共的靜態方法,返回當前類的物件
public static Singleton getSingleton() {
if(single == null) {
single = new Singleton();
}
return single;
}
}
當然你也要問這兩個有什麼區別,就是你不問我也會寫出這兩個的區別
餓漢式和懶漢式的區別:
餓漢式:
好處:餓漢式是執行緒安全的
壞處:物件載入時間過長(佔用記憶體空間)
懶漢式:
好處:延遲物件的建立(不佔用記憶體空間)
壞處:執行緒不安全
一般我們寫程式的時候,寫懶漢式.
四、單例設計模式的應用場景
a. 資料庫連線池的設計一般也是採用單例模式,因為資料庫連線是一種資料庫資源
b.計數器,一般也是單例模式實現,否則難以同步。