作用:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
UML結構圖:

解析:
Singleton模式其實是對全局靜態變量的一個取代策略,上面提到的Singleton模式的兩個作用在C++中是通過如下的機制實現的:1)僅有一個實例,提供一個類的靜態成員變量,大家知道類的靜態成員變量對于一個類的所有對象而言是惟一的 2)提供一個訪問它的全局訪問點,也就是提供對應的訪問這個靜態成員變量的靜態成員函數,對類的所有對象而言也是惟一的.在C++中,可以直接使用類域進行訪問而不必初始化一個類的對象.
下面的實現其實是Singleton的一個簡單實現,并不是特別的通用,一般的,如果一個項目中需要使用到Singleton模式比較多的話,那么一般會實現一個Singleton的模板類,模板類的模板參數是需要采用Singleton模式的類,比如這樣實現:
template<typename?T>
class?Singleton


{
//
.類的聲明
};

//?需要采用singleton模式的類
class?Test
???:?public?Singleton<Test>


{
//?
類的聲明
};但是,下面的實現還是采用最簡單的實現辦法,起的是演示的作用
實現:
1)Singleton.h

/**//********************************************************************
????created:????2006/07/20
????filename:?????Singleton.h
????author:????????李創
????????????????http://www.shnenglu.com/converse/

????purpose:????Singleton模式的演示代碼
*********************************************************************/

#ifndef?SINGLETON_H
#define?SINGLETON_H

class?Singleton


{
public:

????Singleton()
{};

????~Singleton()
{};

????//?靜態成員函數,提供全局訪問的接口
????static?Singleton*?GetInstancePtr();
????static?Singleton??GetInstance();

????void?Test();

private:
????//?靜態成員變量,提供全局惟一的一個實例
????static?Singleton*?m_pStatic;
};

#endif2)Singleton.cpp

/**//********************************************************************
????created:????2006/07/20
????filename:?????Singleton.cpp
????author:????????李創
????????????????http://www.shnenglu.com/converse/

????purpose:????Singleton模式的演示代碼
*********************************************************************/

#include?"Singleton.h"
#include?<iostream>

//?類的靜態成員變量要在類體外進行定義
Singleton*?Singleton::m_pStatic?=?NULL;

Singleton*?Singleton::GetInstancePtr()


{
????if?(NULL?==?m_pStatic)

????
{
????????m_pStatic?=?new?Singleton();
????}

????return?m_pStatic;
}

Singleton?Singleton::GetInstance()


{
????return?*GetInstancePtr();
}

void?Singleton::Test()


{
????std::cout?<<?"Test!\n";
}3)Main.cpp

/**//********************************************************************
????created:????2006/07/20
????filename:?????Main.cpp
????author:????????李創
????????????????http://www.shnenglu.com/converse/

????purpose:????Singleton模式的測試代碼
*********************************************************************/

#include?"Singleton.h"
#include?<stdlib.h>

int?main()


{
????//?不用初始化類對象就可以訪問了
????Singleton::GetInstancePtr()->Test();
????Singleton::GetInstance().Test();

????system("pause");

????return?0;
}