淺說單態類

2021-06-26 17:58:45 字數 981 閱讀 2662

一說單態類,好多程式設計師都感覺腦袋大了,什麼是單態類,它是幹什麼的,類不是可以有許多的例項嗎,怎麼會有單態類?

說白了,單態類就是類的例項只有乙個.這樣大家就都會明白了吧.但是如何做類的例項只有乙份呢?大家的困惑的地方只有乙個,就是類可以在多處new 這個類的例項. 可以說new 無處不在.那怎麼實現類只有乙個例項呢.對吧?其實這是慣性思維的結果,如果我們逆向思維一下就會明白如何實現類的乙個例項.列入 類a,我們可以在任何地方 new a對吧,我們禁止它new a不就可以實現了嗎.但是如何禁止new a呢?我們先看一下new a的操作過程吧. 編譯器在編譯new a時,因為a是乙個類,所以new時首先呼叫a的建構函式(有點屁話,new a 本來就是呼叫a的建構函式嗎....呵呵,如何我們過載了new 操作符在new a時,未必呼叫a的建構函式哦.這個地方討論的是預設的new,沒有經過我們過載過的哦.所以它呼叫a的建構函式),這樣就生成了許多許多的例項.說道這,大家能明白了嗎?如果沒有明白那你可以去一邊吃黃瓜去了.呵呵... 如果類的建構函式是公共的,他們就可以隨意在任何地方new ,但是如果是私有的呢,它還能隨便new嗎?思路有了.宣告乙個單態類,就是把類的建構函式宣告為私有的,但是建構函式的例項如何來?我們又如何捕獲這個例項呢?就第乙個問題,我提醒一下,私有函式,外部不能呼叫,但是內部可以呼叫的,對吧.第2個問題,我提醒一下,類的靜態成員和靜態函式的生存週期是貫穿於整個程序的整個週期是吧.這時我們提供乙個公共方法,它僅返回這個例項就可以了吧,如果實現這個例項返回值只有乙個,不就是實現了單態類了嗎.

如何實現返回值只有乙個呢?加個判斷就可以了嗎,if 例項 != null 就返回例項,== null就new 乙個例項.嘿嘿...簡單吧.

看看簡單的實現吧.

class a

~a()

public:

static a* getinstance()

}private:

static a* m_instance; // 單態類的例項

};

C 單態模板類

單態模式作為乙個經典的設計模式,使用非常廣泛,最近用qt寫乙個應用,其中有多個類決定按單態模式實現,寫的過程中感覺大體上的結構都是類似的,每個寫一遍太囉嗦了,就想能不能實現乙個模板類作為基類,需要使用單態模式的類只需繼承這個類即可,方便使用也能保證質量,避免某次編碼過程漏寫東西。先再網上找了一下有沒...

單態設計模式

package com.yanek.test public inte ce usermanager package com.yanek.test public class usermanage ctory public synchronized static usermanager getinsta...

單態設計模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。實現單例模式的乙個最好的方法就是讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以建立,並且它可以提供乙個訪問該例項的方法。單例模式具有一下特點 1 單例類只有乙個例項 2 單例類必須自己建立自己的唯一例...