大家好我是菜鳥阿貴
今天和大家分享單例模式之懶漢模式和餓漢模式
1:首先說懶漢模式,顧名思義,就是很懶,他不會首先就創建對象,而是有一個判斷纔回去創建愛你實例化對象,例如:
public class TestSinton {
//懶漢式(線程不安全)(除非在公共方法上面添加鎖修飾)
//不先創建實例對象,而是通過判斷纔會創建實例對象,
//因爲一開始實例化對象是null,所以沒有私有化構造器
private static TestSinton sinton = null;
public static TestSinton getInstance(){
if (sinton == null){
sinton = new TestSinton();
}
return sinton;
}
2:上面的代碼我們可以看出來,首先會定義實例化對象爲nul,只有在if判斷中才會去創建實例化對象並且返回!
3:餓漢式
1:顧名思義就是在類加載的時候就創建好了實例化對象:
//餓漢式(線程安全)
//在一開始就實例化對象,實例化單例對象,擁有私有化構造器,一個公共的方法供別人調用!
private static final TestSinton test = new TestSinton();
private TestSinton(){
}
public static TestSinton getInstance1(){
return test;
}
2:上面的代碼我們可以看出來:
1:餓漢式是在類加載式就提前實例化對象,並且擁有讓外部調用不到的私有化構造器,只提供一個公共的方法供他人調用!
4:注意的是:如果懶漢式沒有加鎖(synchronized)關鍵字進行修飾的時候,會導致線程不安全!
2:而餓漢式是線程安全的,因爲一開始他就創建好了實例化對象不可改變!
-----------共勉-------------