C 中如何實現單件模式

2021-05-22 12:38:31 字數 931 閱讀 1003

前幾天c++老師提到在給我們講解知識的時候用到了單件模式的概念!

今天寫出來和大家分享分享!

言歸正傳!

題目是這樣的:

建立乙個類,是這個類在其作用域內只能有乙個例項!

剛開始老師沒講的時候我也實現了這個功能,

我的方法是在類中宣告乙個靜態資料成員(整型),

在類的建構函式裡做點手腳!

我是在建構函式裡檢測一下靜態資料成員的值是不是0(初始是0),如果不是0,就直接exit;

第一次建立物件,它的值是0,建立之後就對靜態資料成員自加,

這樣子就變成1了,下次再建立新物件的時候因為靜態資料成員不是0,所以物件不會被建立!

但是我的這個方法缺點很明顯,因為實在執行的時候進行判斷的,如果使用者建立的兩個物件那麼程式就直接退出了!顯然大家不想出現這樣的情況!

後來老師給我們講解了他的方法,我聽得似懂非懂,聽到他提到了一嘴單件模式,所以我在課後就花了些時間查查資料,總算明白了大概了!

所謂單件模式就是在設計模式中的乙個概念,實現上面題目的要求!

它使用的方法:我用乙個例子來說明:

在這個類中我們把建構函式放在了private:中,這樣子我們在類外就無法直接來利用建構函式建立物件了,我們用在public:中定義了乙個個靜態函式,注意這裡面函式的返回值可是物件的引用,這一點很重要!而且一定要是靜態函式(因為我們無法建立物件,所以只能通過類名::+函式()的形式來呼叫),

如此一來我們只需在main函式裡宣告乙個a類的引用來接受這個f()函式的返回值,比如a& b=a::f();這樣子我們就為靜態物件a起了乙個叫b的別名,一切對b的操作就是對a的操作,以後無論你再宣告多少個a類的引用去接收a::f()的返回值,其得到的都是當前狀態下的a,因為我們知道靜態變數只有在第一次定義初始化的時候,才會分配記憶體,以後再調f()函式,static a a(「小月」);這條語句都不會被執行,而直接返回當前狀態下的a!

單件模式(c )

單件模式是設計模式中最簡單的模式了。定義 確保乙個類只有乙個例項,並提供乙個全域性的訪問點。看下 的實現 class singleton 2 5 public 6 singleton 7 8static shared ptrgetinstance 9 else 15 16private 17stat...

C 單件模式

單件模式應該是所有設計模式中最簡單的乙個了,但是如果使用不當會出現很多問題,下面我們就分析一下單件模式 作用 保證乙個class只有乙個實體 instance 並為它提供乙個全域性唯一的訪問點 適用性 1 對於乙個類 物件 如果它比較大 占用的系統資源非常多 而且這些資源可以被全域性共享,則可以設計...

c 單件模式

1.意圖 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。2.動機 對一些類來說,只有乙個例項是很重要的。雖然系統中可以有許多印表機,但卻只應該有乙個列印假離線 printer spooler 只應該有乙個檔案系統和乙個視窗管理器。乙個數字濾波器只能有乙個a d轉換器。乙個會計系統只能專用於...