單例模式的簡單理解
阿新 • • 發佈:2018-12-17
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個例項 。
其又分為三種形式
餓漢式,懶漢式,雙重鎖式
首先是餓漢式
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 物件的副本,從而確保所有物件都訪問唯一例項
靈活性:因為類控制了例項化過程,所以類可以更加靈活修改例項化過程
缺點
開銷:雖然數量很少,但如果每次物件請求引用時都要檢查是否存在類的例項,將仍然需要一些開銷,可以通過使用靜態初始化解決此問題。