單例類只有乙個例項物件;
該單例物件必須由單例類自行建立;
單例類對外提供乙個訪問該單例的全域性訪問點。
單例模式的優點:
1.單例模式可以保證記憶體裡只有乙個例項,減少了記憶體的開銷。
2.可以避免對資源的多重占用。
3.單例模式設定全域性訪問點,可以優化和共享資源的訪問。
單例模式的缺點:
1.單例模式一般沒有介面,擴充套件困難。如果要擴充套件,則除了修改原來的**,沒有第二種途徑,違背開閉原則。
2.在併發測試中,單例模式不利於**除錯。在除錯過程中,如果單例中的**沒有執行完,也不能模擬生成乙個新的物件。
3.單例模式的功能**通常寫在乙個類中,如果功能設計不合理,則很容易違背單一職責原則。
第 1 種:懶漢式單例
public
class
lazysingleton
//private 避免類在外部被例項化
public
static
synchronized lazysingleton getinstance()
return instance;
}
第 2 種:餓漢式單例
public
class
hungrysingleton
public
static hungrysingleton getinstance()
}
第 3 種:靜態內部類
public
class
singletonmodel
private
static
class
singletonholder
public
static singletonmodel getsingletomodel()
}
第 4 種:懶漢式–雙重校驗
public
class
singletonmodel
public
static singletonmodel getsingletomodel()
}}return singletonmodel;
}}
第 5 種:列舉
public
class
singleton
public
static
enum singletonenum
public singleton getinstance()
}}
單例模式可擴充套件為有限的多例(multitcm)模式,這種模式可生成有限個例項並儲存在 arraylist 中,客戶需要時可隨機獲取,其結構圖如圖 所示。
23種設計模式之建立型模式 5 單例模式
單例設計模式可以分為 懶漢式餓漢式雙重檢測鎖 靜態內部類列舉 下面是詳細介紹 public class singleton public static singleton getinstance 優點 這種寫法比較簡單,就是在類裝載的時候就完成例項化。避免了執行緒同步問題。缺點 在類裝載的時候就完成...
設計模式 建立型模式 單例模式
類載入時建立物件 常量 class eagersingleton public static eagersingleton getinstance 延遲載入 假如在某一瞬間 執行緒a 和 執行緒b 都在呼叫getinstance 方法,此時instance物件為null值,均能通過instance ...
設計模式建立型模式 單例模式
單例模式 singletonparrten 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點 建立單例模式需要三方面操作 1.建立乙個物件 2.定義乙個私有構造方法 禁止外部類對其進行例項化 3.提供乙個對外訪問的方法 單例模式可以通過懶漢式和餓漢式來實現。懶漢式 執行緒不安全 懶漢式 單例模...