單例模式是最簡單的設計模式,沒有之一,相信大家也都聽說過。單例設計模式適合於一個類只有一個實例的情況,比如窗口管理器,打印緩衝池和文件系統,它們都是原型的例子。典型的情況是,那些對象的類型被遍及一個軟件系統的不同對象訪問,因此需要一個全局的訪問指針,這便是衆所周知的單例模式的應用。
通過單例模式你可以:
一、確保一個類只有一個實例被建立
二、提供了一個對對象的全局訪問指針
經典的單例模式有兩種,懶漢式、餓漢式。
懶漢式的特點是延遲加載,比如配置文件,採用懶漢式的方法,顧名思義,懶漢嘛,很懶的,配置文件的實例直到用到的時候纔會加載。。。。。。
餓漢式的特點是一開始就加載了,如果說懶漢式是“時間換空間”,那麼餓漢式就是“空間換時間”,因爲一開始就創建了實例,所以每次用到的之後直接返回就好了。
下面我們就來自己設計一個單例模式的類:
class Singleton//懶漢模式
{
private:
Singleton(){}
public:
static Singleton* p;
static Singleton* getInstance();
};
Singleton* Singleton::p=NULL;
Singleton* Singleton::getInstance()
{
if(NULL==p)
{
if(mtx.try_lock())
{
p=new Singleton;
mtx.unlock();
}
}
return p;
}
class Singleton//餓漢模式
{
private:
Singleton(){}
public:
static Singleton* p;
static Singleton* getInstance()
{
return p;
}
};
Singleton* Singleton::p=new Singleton;