單例模式的餓漢式、懶漢式
阿新 • • 發佈:2018-11-13
單例設計模式:保證在記憶體中只有一個物件
餓漢式:
/* * 餓漢式: */ class MySingleton{ //1. 構造方法私有化,其他類不能訪問該構造(建立該物件) private MySingleton(){}; //2. 建立本類物件,成員變數被私有,對外提供公共的獲取方法 private static MySingleton s=new MySingleton(); //3. 對外提供公共的訪問方法 public static MySingleton getInstance(){ return s; } }
懶漢式:懶漢式:單例的延遲載入模式(面試會用),但是多執行緒的時候會有安全隱患
/* * 懶漢式:單例的延遲載入模式(面試會用),但是多執行緒的時候會有安全隱患 */ class MySingleton{ //1. 構造方法私有化,其他類不能訪問該構造(建立該物件) private MySingleton(){}; //2. 宣告一個引用 private static MySingleton s; //3. 對外提供公共的訪問方法 public static MySingleton getInstance(){ if(s == null){ s=new MySingleton(); } return s; } }
public class Singleton {
public static void main(String[] args) {
MySingleton m1=MySingleton.getInstance();
MySingleton m2=MySingleton.getInstance();
System.out.println(m1==m2);
}
}
第三種方式就是用final修飾 區別: 餓漢式:空間換取時間,多執行緒時:餓漢式不會建立多個物件 懶漢式:時間換取空間,多執行緒時:懶漢式可能會建立多個物件