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

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


{
//
.類的聲明
};

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


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

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

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

#ifndef?SINGLETON_H
#define?SINGLETON_H

class?Singleton


{
public:

????Singleton()
{};

????~Singleton()
{};

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

????void?Test();

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

#endif2)Singleton.cpp

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

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

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

//?類的靜態(tài)成員變量要在類體外進行定義
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:????????李創(chuàng)
????????????????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;
}