當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 21ic電子網(wǎng)
[導(dǎo)讀]單例模式看起來(lái)簡(jiǎn)單,但是需要考慮的問(wèn)題卻很多。保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)該實(shí)例的全局訪問(wèn)點(diǎn)。——《設(shè)計(jì)模式》在軟件系統(tǒng)中,經(jīng)常有這樣一些特殊的類,必須保證他們?cè)谙到y(tǒng)中只存在一個(gè)實(shí)例,才能確保它們的邏輯正確性、以及良好的效率。所以得考慮如何繞過(guò)常規(guī)的構(gòu)造器(不允許使用者ne...

單例模式很簡(jiǎn)單?但你真能寫(xiě)對(duì)嗎?


單例模式看起來(lái)簡(jiǎn)單,但是需要考慮的問(wèn)題卻很多。
保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)該實(shí)例的全局訪問(wèn)點(diǎn)。——《設(shè)計(jì)模式》
在軟件系統(tǒng)中,經(jīng)常有這樣一些特殊的類,必須保證他們?cè)谙到y(tǒng)中只存在一個(gè)實(shí)例,才能確保它們的邏輯正確性、以及良好的效率。所以得考慮如何繞過(guò)常規(guī)的構(gòu)造器(不允許使用者new出一個(gè)對(duì)象),提供一種機(jī)制來(lái)保證一個(gè)類只有一個(gè)實(shí)例。應(yīng)用場(chǎng)景:
  • Windows的Task Manager(任務(wù)管理器)就是很典型的單例模式,你不能同時(shí)打開(kāi)兩個(gè)任務(wù)管理器。Windows的回收站也是同理。
  • 應(yīng)用程序的日志應(yīng)用,一般都可以用單例模式實(shí)現(xiàn),只能有一個(gè)實(shí)例去操作文件。
  • 讀取配置文件,讀取的配置項(xiàng)是公有的,一個(gè)地方讀取了所有地方都能用,沒(méi)有必要所有的地方都能讀取一遍配置。
  • 數(shù)據(jù)庫(kù)連接池,多線程的線程池。

實(shí)現(xiàn)

單例模式的實(shí)現(xiàn)有很多中,我們來(lái)看看一些常見(jiàn)的實(shí)現(xiàn)。某些實(shí)現(xiàn)可能是適合部分場(chǎng)景,但并不是說(shuō)不能用。

實(shí)現(xiàn)一[線程不安全版本]

class?Singleton{
public:
????static?Singleton*?getInstance(){
????????//?先檢查對(duì)象是否存在
????????if?(m_instance?==?nullptr)?{
????????????m_instance?=?new?Singleton();
????????}
????????return?m_instance;
????}
private:
????Singleton();?//私有構(gòu)造函數(shù),不允許使用者自己生成對(duì)象
????Singleton(const?Singleton
21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉