創(chuàng)建型模式,類負(fù)責(zé)創(chuàng)建自己的對(duì)象口糕,并提供唯一的訪問(wèn)方式
意圖:保證一個(gè)類僅有一個(gè)實(shí)例缅阳,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。
主要解決:一個(gè)全局使用的類頻繁地創(chuàng)建與銷毀走净。
由于構(gòu)造函數(shù)是私有的券时,因此無(wú)法通過(guò)構(gòu)造函數(shù)實(shí)例化孤里,唯一的方法就是通過(guò)調(diào)用靜態(tài)函數(shù)GetInstance伏伯。
一個(gè)類的單例模式:
1,getInstance公用接口獲取實(shí)例指針(static)
2捌袜,類的構(gòu)造函數(shù)為私有说搅,防止類在外部被多次實(shí)例化;實(shí)例指針(static)
支持繼承的單例模式:
基類
1虏等,getInstance公用接口獲取實(shí)例指針(static)
2弄唧,構(gòu)造函數(shù)為保護(hù),子類可以訪問(wèn)
3霍衫,實(shí)例指針(static)
子類
1候引,私有構(gòu)造函數(shù),防止外界實(shí)例化
2敦跌,將基類聲明為子類的友元類澄干,使得基類可以創(chuàng)建子類的單例
應(yīng)用于多線程環(huán)境中:創(chuàng)建實(shí)例時(shí)加鎖
提高性能避免加鎖操作:使用靜態(tài)常量的實(shí)例指針,在進(jìn)入主函數(shù)之前實(shí)例化
RAII機(jī)制
RAII是Resource Acquisition Is Initialization的簡(jiǎn)稱,是C++語(yǔ)言的一種管理資源麸俘、避免泄漏的慣用法辩稽。利用的就是C++構(gòu)造的對(duì)象最終會(huì)被銷毀的原則。RAII的做法是使用一個(gè)對(duì)象从媚,在其構(gòu)造時(shí)獲取對(duì)應(yīng)的資源逞泄,在對(duì)象生命期內(nèi)控制對(duì)資源的訪問(wèn),使之始終保持有效拜效,最后在對(duì)象析構(gòu)的時(shí)候喷众,釋放構(gòu)造時(shí)獲取的資源。