單例模式很簡(jiǎn)單?但你真能寫(xiě)對(duì)嗎?
時(shí)間:2021-10-20 16:50:44
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(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...
單例模式看起來(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