根據慕課網課程的理解
http://www.imooc.com/learn/112
單列模式 : 有且只有一個
餓漢模式安全
public class Singleton(){ //1.將構造方法私有化,不容許外部直接建立對象 private Singleton(){} //2.建立一個類的惟一實例,使用private static修飾 private static Singleton instance=new Sngleton(); //3.提供一個用戶獲取實例的方法,使用public static修飾 public static Singleton getInstance(){ return instance; } }
餓漢模式當你加載的時候類自動幫你建立實例,就比如提早吃飯(餓)spa
解釋
1.將構造方法私有化,不容許外部直接建立對象
答:由於外部Singleton singleton=new Singleton();就等於建立了實例,多個實例就不是單列模式線程
2.建立一個類的惟一實例,使用private static修飾
答:使用static是由於直接使用類來訪問實例,Singleton singleton=Singleton.instance;
使用private是爲了安全,封裝一下code
3.提供一個用戶獲取實例的方法,使用public static修飾
答:使用static是由於他屬於對象,加上static變成類全部對象
懶漢模式get
public class Singleton(){ //1.將構造方法私有化,不容許外部直接建立對象 private Singleton(){} //2.申明類的惟一實例,使用private static修飾 private static Singleton instance; //3.提供一個用戶獲取實例的方法,使用public static修飾 public static Singleton getInstance(){ if(instance=null){ instance=new Sngleton(); } return instance; } }
懶漢模式當你調用getInstance()方法的時候纔會建立實例
當有第二我的來訪問的話就不會在建立實例class
懶漢模式和餓漢模式的區別
餓漢式的特色:加載類時比較慢,可是運行時獲取對象的速度比較快,線程安全
懶漢式的特色:加載類時比較快,可是運行時獲取對象的速度比較慢,線程不安全方法
爲何呢???
餓韓式當你加載類的時候就會實例化,而懶漢式是你須要的時候纔會實例化。im