1. 程式人生 > >單例模式的簡單理解

單例模式的簡單理解

        單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項 。

 

其又分為三種形式

餓漢式,懶漢式,雙重鎖式

 

首先是餓漢式

 

 
public class SpUtils{
    //在自己內部定義自己的一個例項,只供內部呼叫
    private static final SpUtils spUtils= new SpUtils();
    private SpUtils(){
    }
    //這裡提供了一個供外部訪問本class的靜態方法,可以直接訪問獲得本類初始化物件
    public static SpUtils getInstance(){
        return spUtils;
    }
}

 

然後是懶漢式

 

 
private static SpUtils spUtils= null;
public static synchronized SpUtils getsp() {
    // 這個方法,不用每次都進行生成物件,只有第一次生成物件
    // 使用時生成例項,提高了效率!  
    if (spUtils == null)
        spUtils = new SpUtils();
    return spUtils;
}  


雙重鎖式

 

 

 

 
//將同步內容下方到if內部,提高了執行的效率,不必每次獲取物件時都進行同步,只有第一次才同步,建立了以後就沒必要了。
private static volatile SpUtils spUtils=null;
private SpUtils(){}
public static SpUtils getsp(){ 
    if(spUtils==null){ 
        synchronized(SpUtils .class){ 
            if(spUtils==null){ 
                spUtils=new SpUtils(); 
                    } 
                        } 
                            } return spUtils;}

優點

例項控制:Singln 會阻止其他物件例項化其自己的 Singln 物件的副本,從而確保所有物件都訪問唯一例項

靈活性:因為類控制了例項化過程,所以類可以更加靈活修改例項化過程

缺點

開銷:雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷,可以通過使用靜態初始化解決此問題。