單例模式是最常見,也是使用最廣泛的一種設計模式,其意圖是保證一個類僅有一個實例,並提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。
單例模式的實現方法有很多種,本文只給出一個最簡單的實現,如下:
(1) 使用一個類的私有靜態指針指向該類的唯一一個實例
(2) 使用一個共有的靜態方法獲取該實例。
#include "stdafx.h"
#include <iostream>
using namespace std;
class Singleton
{
public:
~Singleton()
{
if (singleton!=NULL)
{
delete singleton;
}
}
static Singleton* getSingleton();//全局訪問點
private:
Singleton(){
}
static Singleton* singleton;//指向該類唯一實例的一個靜態指針
};
//靜態成員必須在類外初始化
Singleton * Singleton::singleton = NULL;
Singleton* Singleton::getSingleton(){
if (singleton == NULL)//如果該唯一實例不存在,就創建一個
{
singleton = new Singleton();
}
else cout<<"已存在一個實例"<<endl;
return singleton;
}
調用和測試
int _tmain(int argc, _TCHAR* argv[])
{
Singleton* mySingleton = Singleton::getSingleton();//獲得了該類的唯一一個實例
Singleton* mySingleton2 = Singleton::getSingleton();//輸出“已存在一個實例”,此時mySingleton和mySingleton2同指向該類的唯一實例
return 0;
}