java中的3種方式建立的單例模式
阿新 • • 發佈:2019-01-23
package com.fwd; import java.io.IOException; /** * 單例模式3種建立方式 * @author fwd * 2016年12月1日16:04:46 * *餓漢式和懶漢式的區別: *1餓漢式是空間換時間,建立物件浪費了記憶體空間,懶漢式時間換空間,做出判斷浪費時間,需要的時候在建立節省空間 *2在多執行緒訪問時,餓漢式不會建立多個執行緒,而懶漢式有可能會建立多個物件 */ public class Demo1 { public static void main(String[] args) throws IOException { Singleton1 s = Singleton1.getInstance(); Singleton2 s2 = Singleton2.getInstace(); Singleton3 s3 = Singleton3.s; } } /** * 餓漢式 * @author fwd * */ class Singleton1{ //私有構造方法 private Singleton1(){} //上來就建立物件 private static Singleton1 s = new Singleton1(); //提供對方的訪問方式 public static Singleton1 getInstance(){ return s; } } /** * 懶漢式 * @author fwd * 懶漢式在多執行緒的使用中是有弊端的,在判斷的時候有可能建立兩次物件 * 所以就不是單例模式了,真正的開發中都是用餓漢式 * 這就是單例模式的延遲載入模式 */ class Singleton2{ //私有構造方法 private Singleton2(){} //宣告一個引用 private static Singleton2 s; //提供公共的訪問方式 public static Singleton2 getInstace(){ if (s==null) { //執行緒1等待, 執行緒2等待 s=new Singleton2(); } return s; } } class Singleton3{ //私有構造 private Singleton3(){} //宣告一個final修飾的 物件 public static final Singleton3 s = new Singleton3(); }