1、餓漢式
1)簡單的(de)餓漢式:
Public class ehanshiSingleton{
Private ehanshiSingleton(){
}
Private final static ehanshiSingleton h = new ehanshiSingleton();
Public static ehanshiSingleton getSingleton(){
Return lhanshiSingleton.h;
}
}
2)靜态代碼寫法:
Public class ehanshiSingleton{
Private ehanshiSingleton(){
}
Private final static ehanshiSingleton h;
Static{
h=ehanshiSingleton();
}
Public static ehanshiSingleton getSingleton(){
Return lhanshiSingleton.h;
}
}
以上兩種寫法執行是一樣的(de),在類初始化(huà)是建立一個(gè)對(duì)象,當調用(yòng)靜态方法時(shí)返回同一個(gè)對(duì)象的(de)實例,符合單例設計的(de)設計思想,如使用(yòng)較多(duō)的(de)情況下(xià)會消耗很多(duō)資源;有些單例類使用(yòng)較少,造成資源浪費;
2、懶漢式
1)簡單的(de)懶漢式:
Public class lhanshiSingleton{
Private lhanshiSingleton(){
}
Private static lhanshiSingleton lanhanshiSingleton;
Public static lhanshiSingleton getSingleton(){
If(lanhanshiSingleton==null){
Return new lhanshiSingleton();
}
Return lanhanshiSingleton;
}
}
2)加鎖後的(de)懶漢式:
Public class lhanshiSingleton{
Private lhanshiSingleton(){
}
Private static lhanshiSingleton lanhanshiSingleton;
Public static synchronized lhanshiSingleton getSingleton(){
If(lanhanshiSingleton==null){
Return new lhanshiSingleton();
}
Return lanhanshiSingleton;
}
}
3)雙重檢查鎖懶漢式:
Public class lhanshiSingleton{
Private lhanshiSingleton(){
}
Private static lhanshiSingleton lanhanshiSingleton;
Public static lhanshiSingleton getSingleton(){
Synchronized(lhanshiSingleton.class){
If(lanhanshiSingleton==null){
Return new lhanshiSingleton();
}
}
Return lanhanshiSingleton;
}
}
以上便是單例模式的(de)基本寫法;