單例中的懶漢與餓漢

2021-06-22 16:03:12 字數 1228 閱讀 6589

首先對單例模式的懶漢式與餓漢式進行簡單介紹:

1、餓漢式:在程式啟動或單件模式類被載入的時候,單件模式例項就已經被建立。

2、懶漢式:當程式第一次訪問單件模式例項時才進行建立。

如何選擇:如果單件模式例項在系統中經常會被用到,餓漢式是乙個不錯的選擇。

反之如果單件模式在系統中會很少用到或者幾乎不會用到,那麼懶漢式是乙個不錯的選擇。

**如下:

class instance{}

//懶漢式

class lsingle

public static instance getinstance()

} return _instance; }}

//餓漢式

class esingle

public static instance getinstance()

}

單例模式用途:

單例模式屬於工廠模式的特例,只是它不需要輸入引數並且始終返回同一物件的引用。

如果我們能夠保證系統中自始至終只有唯一乙個資料庫連線物件,顯然我們會節省很多記憶體開銷並且提高cpu利用率。這就是單例模式的用途。當然單例模式不僅僅只用於這樣的情況。在《設計模式:可復用物件導向軟體的基礎》一書中對單例模式的適用性有如下描述:

1、當類只能有乙個例項而且客戶可以從乙個眾所周知的訪問點訪問它時。

2、當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改**就能使用乙個擴充套件的例項時。

關於instance類應該如何設計:

如上面敘述,我們保證單件模式類是我們取得單件例項的唯一訪問點。那麼我們應該保證在程式中盡量避免允許建立instance例項。

通過將建構函式宣告為private可以防止程式設計師通過new關鍵字呼叫構造上函式建立物件。並且在instance類中建立get***()方法呼叫建構函式並返回具體instance例項。具體**如下:

class instance

public static instance getself()

}//懶漢式

class lsingle

public static instance getinstance()

} return _instance; }}

//餓漢式

class esingle

public static instance getinstance()

}

餓漢單例與懶漢單例

餓漢單例 執行緒安全 public class mon public static mon getinstance public static mon getinstance if instance null 此時還沒有例項化 instance new mon return instance pub...

懶漢單例餓漢單例

設計模式 單例 設計模式 23個設計模式 建立型行為型 結構型架構模式 戰略 單例 單態 如何能保證乙個類只出乙個物件?懶漢式 缺點 訪問速度慢 優點 使用才載入物件 synchronized 同步可以解決懶漢式問題 餓漢式 優點 訪問速度快 缺點 提前載入 下面說一下懶漢式和餓漢式的區別及優點 餓...

懶漢餓漢單例模式

懶漢式單例類,在第一次呼叫時的時候例項化自己 public class singleton private static singleton single null 靜態工廠方法 public static singleton getinstance return single 執行緒安全的懶漢式單...