在很多設計模式中,我相信大多數程式猿最早接觸的設計模式就是單例模式啦,當然了我也不例外。單例模式應用起來應該是所有設計模式中最簡單的。單例模式雖然簡單,但是如果你去深深探究單例模式,會涉及到很多很多知識,我會繼續更新這篇文章的。單例模式在整個系統中就提供了一個對象,然後整個系統都去使用這一個對象,這就是單例的目的。
一、飽漢式單例:
public class Singleton {
/**
* 單例對象執行個體
*/
private static Singleton instance = null;
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
二、餓漢式單例:
public class Singleton {
/**
* 單例對象執行個體
*/
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
這兩種單例在實際的代碼中,往往是不能滿足要求的,這就需要我們根據自己的需求來改寫這些單例模式,
例如:如果建立的單例對象需要其他參數,這個時候,我們就需要這樣改寫:
public class Singleton {
/**
* 單例對象執行個體
*/
private static Singleton instance = null;
public static Singleton getInstance(Context context) {
if (instance == null) {
instance = new Singleton(context);
}
return instance;
}
}
例如: 資源共享情況下,必須滿足多線程的并發通路,這個時候,我們就應該這麼做:
public class Singleton {
/**
* 單例對象執行個體
*/
private static Singleton instance = null;
public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
其實無論什麼條件下,無論怎麼改變,都是這兩種單例模式的變種!!!!