標籤:
單例模式特點:
1、一個類只能有一個執行個體
2、自己建立這個執行個體
3、整個系統都要使用這個執行個體
單例模式的形式:
1、餓漢式單例類
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個執行個體,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這裡提供了一個供外部存取本class的靜態方法,可以直接存取
public static Singleton getInstance() {
return instance;
}
}
2、懶漢式單例類
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行產生對象,只是第一次
//使用時產生執行個體,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
第二中形式是lazy initialization,也就是說第一次調用時初始Singleton,以後就不用再產生了。
注意到lazy initialization形式中的synchronized,這個synchronized很重要,如果沒有synchronized,那麼使用getInstance()是有可能得到多個Singleton執行個體。
一般來說第一種比較安全
3、比較常使用的是:
public class Singleton {
private volatile static Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if(singleton==null){
synchronized(Singleton.class){
if(singleton==null){
singleton=new Singleton();
}
}
還可以參考一下android的Activity載入模式:
1、singleTop
2、singleTask
3、singleInstance
android 單例模式