Singleton 單例模式

2022-08-13 06:03:12 字數 1177 閱讀 6322

singleton 單例模式,又叫單子模式,是一種常見的軟體設計模式。這種模式的特點就是應用了 singleton 單例模式的類必須保證始終只有乙個例項(物件)存在。許多時候系統中需要某個類只能同時存在乙個物件,而且可以全域性呼叫。

單例模式的思路是乙個類能返回物件乙個例項(永遠是同乙個)和乙個獲得該例項的方法(必須是靜態方法,通常使用 getinstance這個名稱);當我們呼叫這個方法時,如果類持有的例項不為空,就返回這個例項;如果類保持的例項為空,就建立該類的例項,並將例項賦予該類保持的例項,從而限制使用者只有通過該類提供的靜態方法來得到該類唯一的例項。

單例模式在多執行緒場合下必須小心使用。當唯一的例項未建立時,如果有兩個執行緒同時呼叫建立方法,那麼他們同時沒有檢測到唯一的例項存在,從而同時各自建立了乙個例項,這樣就有兩個例項被建立出來,從而違反了單例模式中例項唯一的原則。解決這個問題的辦法是為標記類是否已經例項化的變數提供乙個互斥鎖(雖然這樣會降低效率)。

下面用乙個例子來說明問題:

一:為你的單例類宣告乙個靜態的例項,並且初始化它的值為nil。

二:在獲取例項的方法中(比如下例中的 getinstance),只有在靜態例項為nil的時候,產生乙個你的類的例項,這個例項通常被稱為共享的例項。

三:重寫allocwithzone 方法,用於確定:不能夠使用其他的方法來建立我們不得例項,限制使用者只能通過獲取例項的方法得到這個類的例項。所以,我們在allocwithzone方法中直接返回共享的類例項。

四:實現基本的協議方法 copywithzone、release、retain、retaincount 和 autorelease,用於保證單例具有乙個正確的狀態。最後四種方法是喲娜與記憶體管理的**,並不適用於垃圾收集**。

@implementation tcpclient

static tcpclient * tcpclient = nil;

+(tcpclient*)getinstance

return tcpclient;

} + (id)allocwithzone:(nszone *)zone

- (id)copywithzone:(nszone*)zone

- (id)retain

- (nsuinteger)retaincount

- (oneway void)release

- (id)autorelease

@end

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...