設計模式之(Singleton)模式的幾種實現

2022-09-02 23:54:21 字數 1842 閱讀 9627

這種實現方法,優點是實現簡單,缺點是在多執行緒頻繁訪問下效率比較低,經常出現鎖競爭。適應於不需要頻繁訪問例項的情況下。

class

singleton

private

: singleton(){};

singleton(

const singleton &);

singleton & operator =(const singleton &);

static singleton *m_instance;

static

mutex m_mutex;

}

這種實現方法相對與第一種效率要高,只要未例項化的情況下進行加鎖,但是**看起來不夠簡潔,需要兩次檢查例項指標是否為空。適用於需要頻繁獲取例項的情況下。

class

singleton

return

m_instance;

}private

: singleton(){};

singleton(

const singleton &);

singleton & operator =(const singleton &);

static singleton *m_instance;

static

mutex m_mutex;

}mutex singleton::m_mutex;

singleton* singleton::m_instance = null;

這種實現方法,相對於前面兩種都要簡單,缺點是程式一啟動便在堆上分配例項,不管有沒有客戶呼叫。適用於程式中確定肯定會使用到該例項的情況。

class

singleton

private

: singleton(){};

singleton(

const singleton &);

singleton & operator = (const singleton &);

static singleton *m_instance;

static

mutex m_mutex;

}mutex singleton::m_mutex;

singleton* singleton::m_instance = new singleton;

按陳碩提出的使用linux下phtread_once執行緒函式實現,該執行緒函式的**在程式的生命週期只會執行一次,利用該執行緒函式的**實現初始化,比上面提到的任何一種方法都要高效,而且**簡潔。缺點是不能跨平台。

class

singleton

private

:

void

singleton():m_instance(null){};

static

void

init()

static singleton *m_instance;

static

pthread_once_t ponce;

}singleton* singleton::m_instance =null;

pthread_once_t singleton::ponce;

設計模式之Singleton

在很多時候,我們出於效能考慮,我們不希望反覆的例項化同乙個物件,而只對該物件例項一次,而所有需要用到該物件的地方都是引用同乙個類。singleton模式就可以達到這樣的目標,它得實現意圖便是確保乙個類只有乙個例項,並且為之提供乙個全域性的訪問點。而下面的 便很好說明了如何實現單例模式 該段 值得注意...

設計模式之Singleton模式

保證類只有乙個物件例項,並提供乙個訪問它的全域性訪問點 只有乙個物件例項 提供乙個全域性訪問點 執行緒安全 在c 11之後,通過靜態區域性成員變數的特性來實現單例模式 第一次呼叫getinstance例項化靜態區域性成員變數instance之後每次呼叫getinstance都是返回第一次例項化的in...

java設計模式 Singleton單例模式

餓漢模式 package singleton created by anshay on 2017年10月14日 email anshaym 163.com 型別 餓漢模式 public class singleton 2.建立類的唯一例項,使用private static修飾 private不允許外...