寫在前面單例singleton設計模式, 老生常談的乙個設計模式。但你真的用對了麼? 用的姿勢很重要!
單例顧名思義就是只產生乙個例項物件。那怎樣保證單一呢?把目標類提供給外部建立例項物件的能力收回,即建構函式設為私有,然後內部提供乙個生成例項靜態方法。設計成單例模式, 有各種各樣的實現方式。
2.1 餓漢式單例
餓漢式單例是指在方法呼叫前,例項就已經建立好了。
- 實現**:
public
class singleton
public
static singleton getinstance()
}
public
class
singletonclient
});}
for (thread thread : threads)
}}
165827088
165827088
165827088
165827088
165827088
165827088
165827088
165827088
165827088
165827088
2.2 懶漢式單例
懶漢式單例是指在方法呼叫獲取例項時才建立例項,因為相對餓漢式顯得「不急迫」,所以被叫做「懶漢模式」。
1)單執行緒的懶漢式單例 – 初學者最容易犯錯的寫法.
public
class singleton
public
static singleton getinstance() catch (interruptedexception e)
instance = new singleton();
}return instance;
}}
上面建立單例在單執行緒下是木問題的。但在多執行緒訪問下就會有問題啦。
如何改進呢?來,再往下看
2)執行緒安全的懶漢式單例.
public
class singleton
public synchronized static singleton getinstance()
return instance;
}}
public
class singleton
public
static singleton getinstance()
}} catch (exception e)
return instance;
}}
public
class singleton
public
static singleton getinstance()
}} catch (exception e)
return instance;
}}
3)使用靜態內建類實現單例模式.
public
class singleton
private
static
class singletonhandler
public
static singleton getinstance()
}
4)使用靜態**塊實現單例模式
public
class singleton
private
singleton()
public
static singleton getinstance()
}
七種單例模式的那些事
public class singleton1 餓漢式 靜態變數 私有化構造方法 private singleton1 建立內部靜態例項 private final static singleton1 instance new singleton1 提供公有的get例項方法 public stati...
設計模式那點事 單例模式
單例模式,也許是我們平常用得和接觸比較多的設計模式了,很多朋友在企業面試的時候都會被問到。說起這裡,我想起了當初畢業面試時那張口結舌的醜態,心中總會多少有些愧疚,痛恨自己基礎實在是糟糕。好吧,讓我們回到主題,什麼是單例模式呢?概念 單例模式 singleton 它保證了乙個類僅有乙個例項,並提供乙個...
設計模式二三事 單例模式
一 單例模式 單例模式模式能夠保證乙個類的物件例項只有乙個,具體的做法是將類的建構函式設定為私有或者受保護,然後再提供乙個靜態介面,通過該介面可以建立或者獲取該類的唯一例項物件,具體的 如下表示 class singleton public static singleton getinstance ...