使用條件: 當系統中只須要某個類的惟一對象時,能夠使用該模式。java
爲何會用到該模式?:由於有時候某些對象的建立須要耗費大量的資源、使用單一(惟一)的對象實例來維護某些共享數據等,在這些場景下便可採用單例模式進行設計,能夠適當地漸少內存開銷,由於此時該惟一對象不會(被限制了)頻繁地建立。spa
第一種:飽漢模式線程
public class SingleTon{設計
private SingleTon(){ };對象
private static SingleTon instance = new SingleTon();內存
public static SingleTon getInstance()資源
{ get
return instance;同步
}class
}
第二種:飢漢模式
public class SingleTon{
private SingleTon(){};
private static SingleTon instance = null;//new SingleTonight();
public static synchronized SingleTon getInstance()
{
if(instance==null) instance = new SingleTon();
return instance;
}
}
這個方法比上面方法有所改進,不用每次都進行生成對象,只是第一次使用生成實例,提升效率。
注意到第二種形式中的synchronized,這個synchronized很重要,若是沒有synchronized線程同時訪問時則可能出現混亂,因此咱們能夠在該方法前加上synchronized關鍵字來保證其被同步訪問。
綜合來講呢,
就是不給外界調用本身構造方法的機會,
而只能經過相似於getInstance()之類的方法獲得此類的實例,
而此實例早已生成,
只能調用,
不能新建,
從而保證了在java應用程序中,一個類只有一個實例存在。