關於單例模式的細節學習 C 實現版

2021-08-21 21:06:25 字數 1990 閱讀 9394

單例模式可以說是最普為人知的一種設計模式了吧,但單例模式的細節又有多少人想清了呢?

單例模式的物件該如何釋放?何時釋放?如何優雅的釋放?

單例模式有哪幾種實現方式?

如果你瞬間就一大段**湧出腦海,我建議你別看這篇博文了,省得浪費你時間。

那下面就開始說正事吧

時間換取空間的實現方式,打死我也不建立物件。這種模式只有在第乙個物件例項化的時候才會建立物件,但實現起來稍微麻煩一些,要考慮到多執行緒的場景。

hungry_singleton_mode.h

#ifndef _singleton_

#define _singleton_

#include

"string"

#include

"iostream"

using

namespace std;

class

myself

//巢狀類實現自釋放單例物件

class

clean_up}}

;static clean_up m_clean;

public

:static myself*

get_instance

(string attr)

pthread_mutex_unlock

(&mutex);}

return m_me;

} string show_attr()

};#endif

hungry_singleton_mode.cpp

#include

"iostream"

#include

"pthread.h"

#include

"hungry_singleton_mode.h"

using

namespace std;

pthread_mutex_t myself::mutex = pthread_mutex_initializer;

myself* myself::m_me =

null

;//餓漢式

myself::clean_up myself::m_clean;

//初始化構造內部類物件

空間換時間的方法,一開始初始化的時候便建立物件,所以不用考慮多執行緒場景下執行緒同步的問題,故實現相對較簡單。

通過內部類的形式實現單例模式的物件自動釋放,具體**如上。但是切記內部類的物件開始需要初始化。

關於單例模式的心結

今天重構公司的 看到有乙個單例的物件,在整個系統中到處都存在呼叫它的身影,因為我們這個專案會在應用伺服器 server 第一次啟動的時候載入資料庫中的 表 為什麼要先載入,因為這個專案採用的是c s模式,利用remoting進行通訊,在客戶端啟動的時候會多次獲取 表中的不同資料。複製 1 publi...

關於單例模式的N種實現方式

在開發中經常用到單例模式,單例模式也算是設計模式中最容易理解,也是最容易手寫 的模式,所以也常作為面試題來考。所以想總結一下單例模式的理論知識,方便同學們面試使用。單例模式實現的方式只有兩種型別,一種是餓漢式 類載入時就初始化 一種是懶漢式 類載入時不初始化 餓漢式沒什麼可講究的因為它既簡單也執行緒...

關於單例設計模式的總結

1 什麼是單例設計模式 單例設計模式就是解決乙個類在記憶體中只有乙個物件。想要保證物件唯一 1 為了避免其他程式過多的建立該類物件,選控制其他程式建立該類物件 2 為了讓其他程式可以訪問到該類物件,只好在本類中自定義乙個物件 3 為了方便其他程式對自定義物件訪問,可以對外提供一些訪問方式 2 單例設...