c 設計模式之單件模式

2021-08-14 13:38:42 字數 1267 閱讀 2088

c++中單件模式的意圖是為了保證乙個類 僅有乙個例項,並提供乙個訪問它的全域性訪問點。

動機:對於一些類來說,只有乙個例項是很重要的。雖然系統中可以有許多印表機,但卻只應該有乙個印表機假離線,只應該有乙個檔案系統和乙個視窗管理器。乙個資料濾波器只能有乙個a/d轉換器。乙個會計系統只能專用於乙個公司。

對於怎樣才能保證乙個類只有乙個例項並且這個例項易於被訪問?乙個全域性變數使得乙個物件可以被訪問,但它不能防止你例項化多個物件,乙個更好的辦法是:讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立(通過擷取建立物件的請求),並且它可以提供乙個訪問該例項的方法,這就是singleton模式)。

**適用性:**在下面的請款可以使用singleton模式

當類只能有乙個例項而且客戶可以從乙個眾所周知的訪問點訪問它;當這個唯一的例項應該是通過子類化可擴充套件的,並且客戶應該無需更改**就能使用乙個擴充套件的例項時。

singleton

static instance()

singletonoperation()

getsingletondate()

static uniqueinstance

singletondate

其中instance()返回唯一的 return uniqueistance

參與者:

實現:

下面是使用singleton模式時所需要考慮的實現問題:

//singleton類定義如下:

class singleton ;

//相應的實現是

singleton* singleton::_instance = 0;

singleton* singleton::instance()

return _instance;

}

客戶僅通過instance成員函式訪問這個單件。變數_instance初始化為 0 ,而靜態成員函式instance返回該變數值,如果其值為 0 則用唯一例項初始化它。instance 使用惰性(lazy)初始化;它的返回值直到被第一次訪問時才建立和儲存。

注意構造器是保護型的(protected),試圖直接例項化singleton 的客戶將得到乙個編譯時的錯誤資訊。這就保證了僅有乙個例項可以被建立。

此外,因為_instance 是乙個指向singleton物件的指標,instance 成員函式可以將乙個紙箱singleton 的子類的指標賦給這個變數。

c 設計模式之單件模式

在軟體系統中,經常有這樣一些特殊的類,必須保證他們在系統中只存在乙個例項,才能確保他們的邏輯的正確性。而單件模式,可以保證乙個類有且只有乙個例項並提供乙個訪問它的全域性訪問點,構建單件模式方法比較多,比較流行的做法是,在類中巢狀乙個靜態變數,並在第乙個建立該例項的時候設定該變數,進入類建構函式時候,...

設計模式之單件模式

有一些物件我們只需要乙個 也只能有乙個 比如 執行緒池 cache 對話方塊 處理偏好設定和登錄檔的物件 日誌物件 充當印表機 顯示卡等裝置的驅動程式的物件。利用靜態類變數 靜態方法和適當的訪問修飾符,就可以做到只存在乙個例項。這是乙個經典的單件模式 public class singleton p...

設計模式之單件模式

總結性 1 和全域性變數不同的是 利用單件模式,可以在需要時才建立物件 2 作用 常用於管理共享資源,eg 資料庫連線池或者執行緒池 3 單件模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點 4 有點 單件可以延遲例項化 5 單件模式的類圖 類名 singleton 靜態變數 static un...