設計模式學習 (Singleton Pattern)

1 單件模式(Singleton Pattern)

  Singleton模式要求一個類有且僅有一個實例,並且提供一個全局的訪問點。從另一個角度來說,Singleton模式其實也是一種職責型模式。因爲我們創建了一個對象,這個對象扮演了獨一無二的角色,在這個單獨的對象實例中,它集中了它所屬類的所有權力,同時它也肩負了行使這種權力的職責!

  在c++中實現單件模式可以使用以下方法:  

  把構造函數設置爲非公有,並且定義一個對類操作的static型函數,在這個函數中實例化類。

class Singleton

{

public :

static Singleton* Instance ( );

protected :

Singleton(){} //必須要有實現,會調用它,否則出錯

private :

static Singleton  *_instance ;

};

 

Singleton* Singleton::_instance = 0;

 

Singleton* Singleton::Instance ( )

{

if(_instance == 0)

  {

  _instance = new Singleton;

  }

return (_instance);

}

 

int main(void)

 

{

 

Singleton *p1=Singleton::Instance();

Singleton *p2=Singleton::Instance();

 

    getchar();

return 0;

 

}//注意最後的delete

在什麼情形下使用單例模式:

使用Singleton模式有一個必要條件:在一個系統要求一個類只有一個實例時才應當使用單例模式。反過來,如果一個類可以有幾個實例共存,就不要使用單例模式。

注意:

不要使用單例模式存取全局變量。這違背了單例模式的用意,最好放到對應類的靜態成員中。

不要將數據庫連接做成單例,因爲一個系統可能會與數據庫有多個連接,並且在有連接池的情況下,應當儘可能及時釋放連接。Singleton模式由於使用靜態成員存儲類實例,所以可能會造成資源無法及時釋放,帶來問題。

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章