設計模式筆記5(單例模式)

2022-02-24 15:35:56 字數 706 閱讀 9632

有的時候一些資源是只能有乙個的,這時候,代表這個資源的物件就只能有乙個,例如執行緒池。快取等資源。

有人會說直接用全域性變數來實現不就是,這種情況是可以的,但是這樣是有缺點的,全域性變數在程式一開始的時候就建立好物件,但是,有些資源是十分消耗資源的,這樣的話浪費大量資源。

經典的模式**如下:

public class name

private staitc name name;

private name(){}

public static name getinstance(){

if (name==null)

name=new name();

return name;

需要注意的有幾點:1.擁有乙個全域性靜態變數

2.建構函式私有化

這段**看似沒有問題,但是如果在多執行緒中,這段**是有出錯的可能的,如果兩個執行緒同時執行了判斷,這時候就都為true,這樣的話就會產生兩個物件。

當然可以把getinstance()方法同步處理,但是這樣無疑會降低程式的效率

可以如下處理:

public static name getinstance(){

if (name==null)

sychronized(name,class)

if(name==null)

name=new name();

return name;

設計模式筆記5(單例模式)

有的時候一些資源是只能有乙個的,這時候,代表這個資源的物件就只能有乙個,例如執行緒池。快取等資源。有人會說直接用全域性變數來實現不就是,這種情況是可以的,但是這樣是有缺點的,全域性變數在程式一開始的時候就建立好物件,但是,有些資源是十分消耗資源的,這樣的話浪費大量資源。經典的模式 如下 public...

設計模式 5 單例模式

單例模式應該是每個開發必須知道的設計模式,也十分簡單,指保證整個程式中只有乙個例項。如果外部可以呼叫建構函式,那麼就無法保證單例 私有化建構函式 private,內部提前初始化 乙個 例項 package singleton public class singleton public static ...

設計模式筆記 單例模式

單例模式在系統開發時很常見,乙個系統中可能會有多個單例模式的運用!它比全域性變數的好處?1.能控制生成時間,保證初始化順序?2.容易保證執行緒安全 全域性變數需要多執行緒client單獨控制併發,單例在類實現中已經做到,無需client再處理 3.減少函式模組之間的耦合,減少命名衝突,便於管理?可能...