一、問題的提出
單例模式是設計模式中最為簡單,最為常見、最容易實現也是最應該掌握的模式。
在基於物件的設計中我們可以通過乙個全域性變數來實現,在物件導向和面向過程結合的設計正規化中,我們也還是通過乙個全域性變數實現這一點,但是當我們遇到了純粹的物件導向的正規化中,這一點只能通過單例魔術來實現了。
簡單得來說,單例模式是讓乙個類只能生成乙個物件
二、如何使用單例模式
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連乙個鍵盤等.單例模式有許多實現方法.第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項,需要加鎖...