該文參考與百度百科觅赊。僅用于自我學習揽涮。
什么叫單例模式?
百度上面是這樣定義的:單例模式是一種常用的軟件設(shè)計模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類橡娄。通過單例模式可以保證系統(tǒng)中寄纵,應(yīng)用該模式的類一個類只有一個實例鳖敷。
單例模式最初的定義出現(xiàn)于《設(shè)計模式》保證一個類僅有一個實例,并提供一個訪問它的全局訪問點程拭。一個類有且僅有一個實例定踱,并且自行實例化向整個系統(tǒng)提供。
單例模式要點恃鞋?
1.某個類只能有一個實例崖媚。
2.必須自行創(chuàng)建這個實例。
3.必須自行像整個系統(tǒng)提供這個實例恤浪。
具體的實現(xiàn)要點畅哑?
1.單例模式的類只提供私有的構(gòu)造函數(shù)。
2.類定義中含有一個該類的靜態(tài)私有對象资锰。
3.該類提供了一個靜態(tài)的公有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對象敢课。
優(yōu)缺點阶祭?
1.單例模式會阻止其他對象實例化其自己的單例對象的副本绷杜,從而確保所有對象都訪問唯一實例。
缺點
1.雖然數(shù)量很少濒募,但如果每次對象請求引用時都要檢查是否存在類的實例鞭盟,將仍然需要一些開銷」逄辏可以通過使用靜態(tài)初始化解決此問題齿诉。
2.使用單例對象(尤其在類庫中定義的對象)時,不能使用new關(guān)鍵字實例化對象。
3.其他類可以刪除對象實例粤剧,但這樣會導致單例類中出現(xiàn)懸浮引用歇竟。
單例模式分為哪幾種?
懶漢式:懶漢式是時間換空間省空間抵恋,也就是每次獲取實例都會進行判斷焕议,看是否需要創(chuàng)建實例,浪費判斷的時間弧关。當然盅安,如果一直沒有人使用的話,那就不會創(chuàng)建實例世囊,則節(jié)約內(nèi)存空間别瞭。
餓漢式:餓漢式是的空間換時間省時間,當類裝載的時候就會創(chuàng)建類實例株憾,不管你用不用蝙寨,先創(chuàng)建出來,然后每次調(diào)用的時候嗤瞎,就不需要再判斷了籽慢,節(jié)省了運行時間。
單例的嚴謹性猫胁?
這里附上一個代碼測試結(jié)果箱亿,什么樣的單例寫法才是正確的。傳送門:《單例嚴謹性測試》
這個內(nèi)容是<NSCopying>弃秆,詳情請點擊傳送門届惋。
思考:1.單例為什么這么寫?
? ? ? ? ? ?2.單例的原理菠赚?
? ? ? ? ? ?3.項目中大量使用單例好嗎脑豹?
? ? ? ? ? ?4.單例的適用場景??
? ? ? ? ? ?5.適用場景的依據(jù)衡查?
? ? ? ? ? ?6.餓氏單例為什么很少使用瘩欺?