1. 程式人生 > >Java的單例模式(singleton)

Java的單例模式(singleton)

ron 好聽 on() == sin 如果 odin 如同 可能

為什麽需要單例?只因為國家的獨生子女政策(當然現在可以生2個)

單例是一個很孤獨的物種,因為它的類裏面做多只有也僅只有它一個。

常見的是懶漢及餓漢模式,

1.懶漢,為什麽這麽叫,看看英文,原為lazy loading,lazy(懶惰的),laoding(音如同佬),叫懶佬,然後一個佬==一條漢子,為好聽,故懶漢。

最基礎的懶漢模式:

//單例模式
public class Singleton {
	
	// 私有化構造方法,使得外部不可能有由new產生實例;
	private Singleton() {
	}

	// 懶漢模式
	private static Singleton instance = null;
	//不加synchronized,線程有問題;
	public static Singleton getInstance() {
		if (instance == null)
		instance = new Singleton();
		return instance;
	}

}

上面有線程安全的問題,如果多線程情況下,可以得出多個實例。

加入synchronized 改進後:

//單例模式
public class Singleton {
    
    // 私有化構造方法,使得外部不可能由用new產生實例;
    private Singleton() {
    }

    // 懶漢模式
    private static Singleton instance = null;    //不加synchronized,線程有問題;
    public static synchronized Singleton getInstance() {
        if
(instance == null) instance = new Singleton(); return instance; } }

懶,因為用到了才加載。

餓漢,漢就不解釋,上面有。為什麽叫餓?因為不管你有沒使用這個單例,它都會實例化,在內存中,好像一個很饑餓的人,不管什麽,先吃了再說。

具體如下:

//餓漢模式
public class Singleton2 {
	//私有化構造方法,使得外表不能用new產生一個實例。
	private Singleton2(){}
	//餓漢模式,不管你有沒用這個實例,先實例化。
	private static Singleton2 instance =new Singleton2();
	public static Singleton2 getInstance(){
		return instance;
	};

}

Java的單例模式(singleton)