單例模式 Singleton

2021-07-23 11:11:39 字數 1273 閱讀 5817

單例模式是一種常用的軟體設計模式。通過單例模式可以保證系統中乙個類只有乙個例項.並提供乙個訪問它的全域性訪問點。

單例模式的動機:

對於系統中的某些類來說,只有乙個例項很重要,例如,乙個系統中可以存在多個列印任務,但是只能有乙個正在工作的任務;乙個系統只能有乙個視窗管理器或檔案系統;乙個系統只能有乙個計時工具或id(序號)生成器。如在windows中就只能開啟乙個任務管理器。如果不使用機制對視窗物件進行唯一化,將彈出多個視窗,如果這些視窗顯示的內容完全一致,則是重複物件,浪費記憶體資源;如果這些視窗顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給使用者帶來誤解,不知道哪乙個才是真實的狀態。因此有時確保系統中某個物件的唯一性即乙個類只能有乙個例項非常重要。

如何保證乙個類只有乙個例項並且這個例項易於被訪問呢?

定義乙個全域性變數可以確保物件隨時都可以被訪問,但不能防止我們例項化多個物件。乙個更好的解決辦法是讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項被建立,並且它可以提供乙個訪問該例項的方法。這就是單例模式的模式動機。

從具體實現角度來說,就是以下三點:

一是單例模式的類只提供私有的建構函式。

二是類定義中含有乙個該類的靜態私有物件。

三是該類提供了乙個靜態的公有的函式用於建立或獲取它本身的靜態私有物件。

實現如下:

單例模式:

不考慮併發情況的:

class csingleton

public:

static csingleton * getinstance()

}; 呼叫:

csingleton *p=csingleton::getinstance();

考慮多執行緒併發的情況:

class singleton

mutex_unlock();

}return instance;

}static

void deleteinstance()

}private:

singleton(){}

singleton(const singleton& src){}

static singleton *instance;

};singleton *singleton::instance=null;//靜態成員初始化

呼叫:singleton *q=singleton::getinstance();

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...