設計模式 單例模式

2021-08-04 04:51:17 字數 1984 閱讀 9533

在我們日常的工作中經常需要在應用程式中保持乙個唯一的例項,如:io處理,資料庫操作等,由於這些物件都要占用重要的系統資源,所以我們必須限制這些例項的建立或始終使用乙個公共的例項,這就是我所分享的設計模式—單例模式(singleton)

單例模式需要確保某個類中只有乙個例項,而且自行例項化並向整個系統提供這個例項。

場景具體使用

**計數器

web應用

配置管理器

應用程式

日誌管理系統

資料庫連線池

多執行緒執行緒池

資源性應用

記憶體池作業系統

檔案系統或印表機

單例模式(singleton):保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

單例模式是幾個建立模式中最對立的乙個,它的主要特點不是根據使用者程式呼叫生成乙個新的例項,而是控制某個型別的例項唯一性,我們可以通過看如下圖,知道該模式所包含的角色只有乙個,就是singleton,它擁有乙個私有建構函式,這確保使用者無法通過new直接例項它。除此之外,該模式中包含乙個靜態私有成員變數和靜態公有方法,該方法負責檢驗並例項化自己,然後儲存在靜態成員變數中,以確保只有乙個例項被建立。

單例模式結構圖

這裡主要介紹餓漢式實現懶漢式實現,這兩種實現方式的特點如下所示:

實現方式

優點特點

餓漢式實現

載入程序時,靜態建立單例物件,執行緒安全

無論使用與否,總是需要建立

懶漢式實現

用則建立,不用不建立,什麼時間用什麼事件建立

將單例類的唯一物件例項,實現為其靜態成員變數

class singleton

private:

//建立靜態成員變數

static singleton instance;

};

直到第一次使用,才建立單例類的唯一物件例項

class

singleton

return *instance;

}private:

//建立靜態成員變數

static singleton *instance = null;

};

借助互斥鎖防止單例物件在不同執行緒中被重複建立

//建立互斥鎖

pthread_mutex_t singleton::mutex = pthread_mutex_initializer;

class singleton

pthread_mutex_unlock(&mutex);

return *instance;

}private:

//建立靜態成員變數

static singleton *instance = null;

};//優化:

//因為在第一次進行instance判斷時,加鎖可能起作用,但是在以後instance不為空時,可能造成效能的損失,故進行優化。

public:

static singleton &getinstance()

pthread_mutex_unlock(&mutex);

}return *instance;

}

如果**所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段**。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。

或者說:乙個類或者程式所提供的介面對於執行緒來說是原子操作,或者多個執行緒之間的切換不會導致該介面的執行結果存在二義性,那就是執行緒安全。

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...