C++實現單例模式
本篇博文我們來簡單學習一下設計模式中最簡單的一個模式——單例模式。單例模式我們將建構函式設計成私有化,因此無法通過建構函式例項化,唯一的方法就是通過呼叫靜態函式GetInstance。此外,我們建立一個靜態該類的指標,並且僅在靜態函式中例項化一次。整個過程的實現就可以讓無論多少次呼叫,類物件僅會構建一個。
它的優勢主要以下幾個方面:
① 控制資源的使用,通過執行緒同步來控制資源的併發訪問;
② 控制例項產生的數量,達到節約資源的目的;
③ 作為通訊媒介使用,也就是資料共享,它可以在不建立直接關聯的條件下,讓多個不相關的執行緒或者程式之間實現通訊。
比如資料庫連線池的設計一般採用單例模式,資料庫連線是一種資料庫資源。
單例模式相對比較簡單,我們直接看下面的C++程式:
class Singleton
{
public:
~Singleton()
{
if (singleton != nullptr)
{
delete singleton;
singleton = nullptr;
}
}
static Singleton* GetInstance() // 唯一介面來例項化類物件
{
if (singleton == nullptr)
singleton = new Singleton();// 僅會例項化一個物件
return singleton;
}
private:
static Singleton* singleton; // 靜態類物件,類外需要初始化
Singleton() // 私有建構函式
{
}
};
Singleton* Singleton::singleton = nullptr; // 類外初始化
int main()
{
Singleton* item1 = Singleton::GetInstance();
Singleton* item2 = Singleton::GetInstance();
return 0;
}
以上是個人學習記錄,由於能力和時間有限,如果有錯誤望讀者糾正,謝謝!
轉載請註明出處:http://blog.csdn.net/FX677588/article/details/76563255
相關文章
- 單例模式c++實現單例模式C++
- C++ std::call_once 實現單例模式C++單例模式
- PHP實現單例模式PHP單例模式
- golang實現單例模式Golang單例模式
- Rust實現單例模式Rust單例模式
- 單例模式實現對比單例模式
- Python中實現單例模式Python單例模式
- 單例模式 – 單例登錄檔與 Spring 實現單例剖析單例模式Spring
- DCL單例模式中的缺陷及單例模式的其他實現單例模式
- JS中的單例模式及單例模式原型類的實現JS單例模式原型
- 【php實現設計模式】之單例模式PHP設計模式單例
- 用Python實現設計模式——單例模式Python設計模式單例
- 利用static來實現單例模式單例模式
- 單例模式:5種實現方式單例模式
- 單例模式的各種實現單例模式
- 設計模式回顧——單例模式(C++)設計模式單例C++
- Go 實現常用設計模式(一)單例模式Go設計模式單例
- Java 利用列舉實現單例模式Java單例模式
- 單例模式的 Java 實現與思考單例模式Java
- 五種方式實現 Java 單例模式Java單例模式
- Python 5種方法實現單例模式Python單例模式
- Python 實現工廠模式、抽象工廠,單例模式Python模式抽象單例
- 設計模式:單例模式的使用和實現(JAVA)設計模式單例Java
- 設計模式學習-使用go實現單例模式設計模式Go單例
- Java 實現單例模式的 9 種方法Java單例模式
- Python單例模式(Singleton)的N種實現Python單例模式
- 單例模式的各種實現方式(Java)單例模式Java
- JS實現單例模式的多種方案JS單例模式
- 美團一面:會單例模式嗎,寫個單例看看?(8大單例模式實現方式總結)單例模式
- C++學習隨筆——簡單的單例設計模式例項C++單例設計模式
- 你真的會寫單例模式嗎——Java實現單例模式Java
- python如何實現單例模式?常用方法彙總!Python單例模式
- 使用sync.Once實現高效的單例模式單例模式
- Java設計模式——實現單例模式的七種方式[JZOF]Java設計模式單例
- C++中單例模式和static的對比C++單例模式
- C++從靜態型別到單例模式C++型別單例模式
- 命令模式(c++實現)模式C++
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- C# 單例模式的實現和效能對比C#單例模式