天天看點

設計模式(4)-序列生成器之單例模式

場景:序列生成器

系統中統一的序列生成程式,整個系統統一一套!那麼就用單例模式吧!

首先看看單例模式

1)類持有一個自己的執行個體,而且還是個靜态執行個體。

2)類的構造函數為私有屬性。

3)用以獲得執行個體的方法為靜态方法。

看看類圖

設計模式(4)-序列生成器之單例模式

然後看一段試例程式:

1、構造方法私有

那麼,就意味着,隻能在Singleton的成員函數中,才能調用Singleton的構造函數來建立執行個體。在Singleton之外,不能建立Singleton對象的執行個體。

2、代碼中,定義了GetInstance方法,隻能通過GetInstance方法來擷取Singleton對象的執行個體,單例就是在GetInstance方法中控制的。

首先,Singleton有一個

static Singleton* instance;//惟一執行個體 

Singleton* Singleton::instance=NULL;

在這裡初始化為NULL。

Singleton* Singleton::GetInstance()  

{  

 if(instance == NULL)

 {

  instance = new Singleton();

 }

 return instance;  

}  

上面的函數,就是通過instance來實作單例的。

當第一次調用GetInstance時,instance 為NULL,是以會執行

instance = new Singleton();

把這個建立的執行個體儲存到靜态成員instance,并傳回這個指針。

第二次到第N次調用GetInstance時,由于instance不為空,是以會直接傳回instance 。也就是第一次調用GetInstance建立的那個執行個體。

是以這樣就實作了,單執行個體。

意思就是說,Singleton對象的執行個體,隻會被建立一次,就是說記憶體中,隻存在一個Singleton的執行個體,就是所謂,單執行個體。

弄個生成單例的執行個體程式吧!

繼續閱讀