singleton 一般是我們學習設計模式時接觸的第一種模式,也是比較常用的一種模式
目前爲止,有如下三種正確的寫法
今天回過頭來看了一下,發現1和3少了私有構造器,現在修改了一下加上了
第一種
public class Singleton {
static Singleton instance;
private Singleton()
{
}
public static synchronized Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}
}
這種寫發的問題是併發引起的效率問題,因爲實際上只有在第一次初始化的時候在真正需要鎖
第二種,也是比較常見的方法
public class Singleton
{
private static Singleton instance = new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return instance;
}
}
但這種方法不是 lazy loading的
第三種,一種創新性的寫法,並解決了 lazy loading的問題
public class Singleton {
private Singleton()
{
}
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}