C 設計模式之單例模式

2021-10-06 06:33:38 字數 2446 閱讀 5780

一、問題的提出

單例模式是設計模式中最為簡單,最為常見、最容易實現也是最應該掌握的模式。

在基於物件的設計中我們可以通過乙個全域性變數來實現,在物件導向和面向過程結合的設計正規化中,我們也還是通過乙個全域性變數實現這一點,但是當我們遇到了純粹的物件導向的正規化中,這一點只能通過單例魔術來實現了。

簡單得來說,單例模式是讓乙個類只能生成乙個物件

二、如何使用單例模式

1、我們都知道物件的生成特點有兩個:

(1)開闢記憶體

(2)呼叫建構函式

那麼怎麼才能使乙個類只生成乙個物件呢?

第一種思路:我們可以讓建構函式只被呼叫一次。

第二種思路:我們給乙個標識,如果有物件,就返回,如果無物件就物件呼叫建構函式生成唯一的物件。

2、**實現

無單例模式下如何處理

class

master

char

* mname;

int mage;

bool m***;

}int

main()

這樣我們發現這段**執行錯誤,根據封裝的特性,私有的成員只允許在本類類中訪問。我們現在提供乙個介面來生成唯一的物件

class

master

return

*pm;

}private

:master

(char

* name,

int age,

bool ***)

:mname

(new

char

[strlen

(name)+1

]())

,mage

(age)

,m***

(***)

char

* mname;

int mage;

bool m***;

static master* pm;

//靜態的成員變數

}master* master::pm =

null

;int

main()

這樣乙個簡單的單例模式就設計成功了。

三、單例模式不依賴任何場景的設計

這是乙個完整的單例模式的設計

class

singleton

return psing;

}private

: singleton

singleton

(const singleton&);

static singleton* psing;};

singleton* singleton::psing =

null

;int

main()

四、單例模式的優化

1、上面的單例模式是執行緒不安全的單例模式,我們通過加鎖使得單例模式執行緒安全

class

singleton

unlock()

;return psing;

}private

: singleton

singleton

(const singleton&);

static singleton* psing;};

singleton* singleton::psing =

null

;

但是加鎖解鎖又會有額外的開銷產生,浪費資源。所以我們加雙重鎖

2、雙重鎖機制的單例模式

class

singleton

unlock()

;}return psing;

}private

: singleton

singleton

(const singleton&);

static singleton* psing;};

singleton* singleton::psing =

null

;

五、懶漢模式和餓漢模式
class

singleton

private

:singleton()

singleton

(const singleton&);

static singleton* psing;};

singleton* singleton::psing =

newsingleton()

;//main函式執行前

intmain()

C 設計模式之單例模式

在遊戲開發過程中,我們時常會遇到單例模式的運用場景。比如你遊戲當中的最終boss,你希望你的boss只能有乙個,所以這裡你就可以用單例模式 那麼什麼是單例模式呢?看下面的 分析。include include using namespace std class singleton public st...

C 設計模式之單例模式

設計模式是以理論的高度,總結了開發過程中的一多種不同的方法,在各種設計模式中,它們都有著不同實現方式,所起的作用也不相同,我最近看了部分設計模式,主要是以我自己的理解來闡述對它們的看法。我們可以看到單例的大概實現是很簡單的。幾個需要注意的地方是 只有當我們的建構函式為私有時,此時,我們在類外部就不能...

C 設計模式之 單例模式

單例模式,故名思義,其意圖是保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有的程式模組共享.在很多地方要用到這種設計模式,如系統的日誌輸出,作業系統的視窗,乙個pc連乙個鍵盤等.單例模式有許多實現方法.第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項,需要加鎖...