靜態**塊兒方式
懶漢式執行緒安全方式:
doublecheck
靜態內部類方式
列舉
保證在整個軟體系統中,對某個類物件只能存在乙個例項,並且提供乙個取得其物件例項的方法。
實現構造器私有化,屬性位置建立例項的靜態變數, 提供靜態方獲取靜態例項。
public
class
single
// 靜態例項
private
final
static single instance =
newsingle()
;// 靜態方法獲取
private
static single getinstance()
}
優點:
寫法比較簡單,在類裝載的時候就完成了例項化。避免了執行緒同步問題。
缺點:在類裝載的時候完成例項化,沒有達到lazy loading
的效果,如果從始至終沒有使用過這個例項,則會造成記憶體的浪費。
結論:這種方式也是在類載入時候進行例項的new
, 因此優點和缺點和靜態常量方式一致。
實現
package club.fsociety.singleton;
public
class
single2
// 靜態例項
private
static single2 instance;
// 靜態**快兒
static
// 靜態方法獲取
private
static single2 getinstance()
}
解決lazy loading
的問題。
實現:
package club.fsociety.singleton;
public
class
single3
// 靜態成員
private
static single3 instace;
// 獲取例項的方法
private
static single3 getinstace()
}
優點:
實現了lazy loading
。
缺點:執行緒不安全,可能多個執行緒同時判定為未建立,後進行建立,會導致多建立出來幾個例項。
結論:了解其存在的問題,開發中不要使用。
實現使用了同步**塊來修飾獲取例項的方法:
package club.fsociety.singleton;
public
class
single3
// 靜態成員
private
static single3 instace;
// 獲取例項的方法
private
static
synchronized single3 getinstace()
}
優點
即解決了餓漢中存在的lazy loding
問題,又解決了執行緒安全問題。
缺點getinstance
方法頻繁呼叫下會導致效率地下。
結論在實際開發中不推薦使用。
實現
package club.fsociety.singleton;
public
class
single4
// 靜態成員
private
static single4 instace;
// 獲取例項的方法
private
static single4 getinstace()
}return instace;
}}
優點
即解決了lazy loading
和 執行緒安全問題,又避免每次getinstance
的時候都執行一遍同步**塊兒。
缺點結論:
強烈推薦使用。
實現方式
外部類被裝載的時候,靜態內部類不會被裝載。當呼叫外部類獲取靜態內部類方法時候再裝載靜態內部類,且靜態內部類被裝載後會初始化靜態**,且執行緒安全。這樣既能解決執行緒安全問題,也能解決lazy loading
問題。
package club.fsociety.singleton;
public
class
single5
// 靜態內部類
private
static
class
single5instance
// 獲取例項方法
public
static single5 getinstance()
}
優點:
解決執行緒安全,和lazylaoding
問題,且效率高。
結論推薦使用。
實現方式:
jdk1.5
中新增的列舉來實現單例模式,因為列舉當中的每個列舉元素本聲就是自身的乙個例項的單例,剛好可以直接借助來實現單例模式。
public
enum single6
}
優點
能避免多執行緒同步問題,而且還能防止反序列化重新建立的物件。其為最推薦的方式。
設計模式筆記 3 單例模式
單例類只能有乙個例項 單例類必須自己建立自己的唯一例項 單例類必須提供給所有其他物件這個例項 單例類有私有的構造方法和本身的乙個靜態例項物件 單例類向外界提供乙個可訪問的靜態方法,供外界獲取它的靜態例項。目的 保證乙個類有且僅返回這乙個例項物件。public class singleobject p...
設計模式筆記 單例模式
單例模式在系統開發時很常見,乙個系統中可能會有多個單例模式的運用!它比全域性變數的好處?1.能控制生成時間,保證初始化順序?2.容易保證執行緒安全 全域性變數需要多執行緒client單獨控制併發,單例在類實現中已經做到,無需client再處理 3.減少函式模組之間的耦合,減少命名衝突,便於管理?可能...
設計模式筆記 單例模式
1 懶漢式 1 執行緒不安全 public class singleton public static singleton getinstance return singleton 缺點 不支援多執行緒。2 執行緒安全 public class singleton public static syn...