1. 程式人生 > >GoF建立型模式——單例

GoF建立型模式——單例

Singleton Pattern

使用單例的意圖

  • 確保一個類只有一個例項

使用場景

  • 在多個客戶端會話中共享同一個類的某個例項
  • 使某個類只有一個例項物件,或有限個例項物件

好處或缺點

  • 需要確保多執行緒對單例物件的訪問同步

示例程式碼

////Singleton.h
#pragma once
#include <mutex>

class Singleton
{
public:
    Singleton* Instance();

protected:
    Singleton();

private:
    static std::mutex m_mutex;
    static
Singleton * instance; }; ////Singleton.cpp #include "Singleton.h" Singleton* Singleton::instance = nullptr; std::mutex Singleton::m_mutex; Singleton * Singleton::Instance() { if (this->instance == nullptr) { m_mutex.lock(); if(this->instance == nullptr) this
->instance = new Singleton; m_mutex.unlock(); } return this->instance; } Singleton::Singleton() { }

注意點:所謂的執行緒安全只能保證同時最多有一個例項,但是不同的執行緒可以同時訪問這同一個例項,所以還需要確保執行緒訪問的同步問題