所謂類的單例設計模式,就是採取一定的方法保證在整個軟體系統中,對某個類只能存在乙個物件例項,
並且該類只提供乙個取得其物件例項的方法(靜態方法)。
比如hibernate中的sessionfactory,它充當的就是資料儲存源的**,並負責建立session物件。
sessionfactory並不是輕量級的,一般情況下,乙個專案只需要乙個sessionfactory就夠,這時就需要單例設計模式。
public
class
singletontest01
}/**
- 餓漢式-靜態變數
*/class
singleton
/** * 2.本類中建立靜態常量例項
*/private
final
static singleton instance =
newsingleton()
;/**
* 3. 對外提供乙個方法,返回單例物件
** @return 單例物件
*/public
static singleton getinstance()
}
public
class
singletontest02
}/**
* 餓漢式-靜態**塊
*/class
singleton
/** * 2.本類中申請靜態常量
*/private
final
static singleton instance;
/* 3.使用靜態**塊建立單例物件
*/static
/** * 4. 對外提供乙個方法,返回單例物件
** @return 單例物件
*/public
static singleton getinstance()
}
public
class
singletontest03
}class
singleton
/** * 懶漢式,在使用的時候才建立物件,但是這是執行緒不安全的
* 在高併發極端情況下有可能會覆蓋建立
* 乙個執行緒判斷if為true的時候,另乙個執行緒也判斷if為true,就覆蓋了
** @return 單例
*/public
static singleton getinstance()
return instance;
}}
public
class
singletontest04
}class
singleton
/** * 懶漢式,在使用的時候才建立物件,但是這是執行緒不安全的
* 使用synchronized,解決執行緒安全問題,但是synchronized效率不高
** @return 單例
*/public
static
synchronized singleton getinstance()
return instance;
}}
public
class
singletontest04
}class
singleton
/** * 懶漢式,給建立單例物件的new 加同步,其實這樣根本沒用
** @return 單例
*/public
static singleton getinstance()
}return instance;
}}
public
class
singleton06
}class
singleton
// 先判斷是否為空, 再次判斷是否為空,雙重檢查
public
static singleton getinstance()
}}return instance;
}}
public
class
singleton07
}class
singleton
// 使用類載入機制建立單例物件,只有在呼叫getinstance方法的時候才會裝載這個類
public
static
class
singletoninstance
public
static singleton getinstance()
}
public
class
singleton08
}/**
* 使用列舉的特性,也可以建立單例
*/enum singleton
}
01 設計模式 單例模式
package com.hxh public class hungry public static hungry getinstance public static void main string args start 注意事項 變數hungry必須是 私有,靜態,不可變 構造器私有 公開的get...
01 設計模式 單例模式
package com.hxh public class hungry public static hungry getinstance public static void main string args start 注意事項 變數hungry必須是 私有,靜態,不可變 構造器私有 公開的get...
設計模式星火01 單例模式
1 用單例的時機 需要保證乙個類只有乙個例項,並且提供乙個他的全域性訪問點。2 方法 2.1 將建構函式定義為保護型別的 使用者沒有辦法建立物件 2.2 向類中新增兩個靜態成員 乙個靜態成員函式和乙個私有靜態成員變數 static classname m pinstance static class...