設計模式 單例模式

2021-10-09 21:25:29 字數 1475 閱讀 6074

單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。

1 在類的 構造方法定義為私有方法,這樣其他處的**就無法通過呼叫該類的構造方法來例項化該類的物件,只有通過該類提供的靜態方法來得到該類的唯一例項;

2 在類內 提供乙個靜態方法,呼叫該方法時,若存在例項就返回這例項的個引用,若無例項 就 建立該類的例項 並 返回例項的引用。

1 全域性只有乙個例項:要求是靜態,並且私有構造(防止使用者自己宣告並定義例項)

2 執行緒安全

3 禁止賦值和拷貝

4 使用者通過介面獲取例項:使用 static 類成員函式

唯一類的例項,具有全域性變數的特點,在任何位置都可以通過介面獲取到那個唯一例項。例如資料池,用來快取資料的資料結構,需要在一處寫,多處讀取 或 多處寫,多處讀取。如**站等。

優點:在記憶體中只有乙個物件,節省記憶體空間;

避免頻繁的建立銷毀物件,可以提高效能;

避免對共享資源的多重占用,簡化訪問;

為整個系統提供乙個全域性訪問點。

缺點:不適用於變化頻繁的物件。

只有第一次呼叫時才會 將建立例項。提供其中一種將例項設定為靜態的方式,可以保證執行緒安全(c++11 特性: 如果當變數在初始化的時候,併發同時進入宣告語句,併發執行緒將會阻塞等待初始化結束),防止記憶體洩漏(區域性靜態變數的生命週期為整個源程式

包括 雙重加鎖實現,靜態初始化實現。

懶漢模式

靜態初始化實現

#include

using

namespace std;

class

singleton

//singleton(const singleton&)=delete;

//singleton& operator=(const singleton&)=delete;

static singleton&

get_instance()

private

:singleton()

};intmain()

呼叫結果

constructor called!

destructor called!

在單例類定義的時候就進行例項化。餓漢實現本來就是執行緒安全的,不用加鎖。

但是如果一直未使用,可能造成資源的浪費。

餓漢式單例

class

sigletion

static sigletion * intance=

new sigletion;

//靜態成員,指向sigletion物件的指標。

public

://提供靜態共有方法,可以使用類名加網域名稱進行訪問,返回物件指標;

static sigletion*

getsigletion()

};

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...