單例類只能有乙個例項
單例類必須自己建立自己的唯一例項
單例類必須提供給所有其他物件這個例項
單例類有私有的構造方法和本身的乙個靜態例項物件
單例類向外界提供乙個可訪問的靜態方法,供外界獲取它的靜態例項。
目的:保證乙個類有且僅返回這乙個例項物件。
public class singleobject
private static singleobject getinstance()
public void showmsg()
}
解決:乙個全域性使用的類頻繁地建立和銷毀。
構造方法是私有的決定了外界無法呼叫構造方法建立例項,必須通過單例類提供的靜態方法獲取唯一的類靜態例項。
單例模式的幾種實現方式:
1. 懶漢式,執行緒不安全
lazy初始化:是
多執行緒安全:否
嚴格來說不算單例模式。
public static getinstance()
return instance;
}
2. 懶漢式,執行緒安全
lazy初始化:是
執行緒安全:是
優點:第一次呼叫才生成例項,避免浪費內容
缺點:必須加鎖synchronized才能保證單例,加鎖會影響效率
public class singleobject
public static synchronized singleobject getinstance()
return instance;
}}
3. 餓漢式
lazy初始化 否
執行緒安全 是
優點 沒有加鎖,提高效率
缺點 類載入時就生成例項,浪費內容
實質 基於classloder機制避免了多執行緒同步問題,產生類裝載的情況不少,但大多是呼叫單例的getinstance方法,也存在其他例如呼叫其他靜態方法的情況,這種情況下顯然沒達到lazyload的效果
public class singleobject
private static singleobject getinstance()
public void showmsg()
}
4. 雙檢鎖
lazy 初始化是
執行緒安全 是
鎖**塊的好處,提高效率,過濾掉已經存在例項的物件
也不能鎖this synchronized(this), 因為靜態方法在類載入時就產生,類物件還沒生成。
synchronized(singleobject.class) = static synchronized void getinstance(){}
public class singleobject
private static singleobject getinstance()
return instance;}}
}}
5. 登記式、靜態內部類
lazy初始化 是
執行緒安全 是
設計模式筆記 3 單例模式
靜態 塊兒方式 懶漢式執行緒安全方式 doublecheck 靜態內部類方式 列舉 保證在整個軟體系統中,對某個類物件只能存在乙個例項,並且提供乙個取得其物件例項的方法。實現構造器私有化,屬性位置建立例項的靜態變數,提供靜態方獲取靜態例項。public class single 靜態例項 priva...
設計模式筆記 單例模式
單例模式在系統開發時很常見,乙個系統中可能會有多個單例模式的運用!它比全域性變數的好處?1.能控制生成時間,保證初始化順序?2.容易保證執行緒安全 全域性變數需要多執行緒client單獨控制併發,單例在類實現中已經做到,無需client再處理 3.減少函式模組之間的耦合,減少命名衝突,便於管理?可能...
設計模式筆記 單例模式
1 懶漢式 1 執行緒不安全 public class singleton public static singleton getinstance return singleton 缺點 不支援多執行緒。2 執行緒安全 public class singleton public static syn...