1. 程式人生 > >java中的3種方式建立的單例模式

java中的3種方式建立的單例模式

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();
}