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模式由於使用靜態成員存儲類實例,所以可能會造成資源無法及時釋放,帶來問題。