特點(diǎn):
1:一個(gè)類(lèi)只有一個(gè)對(duì)象
2:必須是類(lèi)內(nèi)部自行創(chuàng)建這個(gè)對(duì)象
3:向整個(gè)系統(tǒng)提供這個(gè)對(duì)象
實(shí)現(xiàn)過(guò)程:
1:類(lèi)的構(gòu)造函數(shù)是private
2:類(lèi)中含有一個(gè)該類(lèi)的靜態(tài)私有對(duì)象
3:提供一個(gè)靜態(tài)的公有函數(shù)用于創(chuàng)建、獲取本身的靜態(tài)私有對(duì)象
4:當(dāng)然還要有一個(gè)private的clone方法,防止克隆
優(yōu)點(diǎn)
1:實(shí)例控制,單例模式會(huì)阻止其他對(duì)象實(shí)例化其自己的單例對(duì)象的副本,從而確保所有對(duì)象都訪問(wèn)唯一實(shí)例。
2:靈活性,因?yàn)轭?lèi)控制了實(shí)例化過(guò)程,所以類(lèi)可以靈活更改實(shí)例化過(guò)程
缺點(diǎn)
1:開(kāi)銷(xiāo),雖然數(shù)量很少,但如果每次對(duì)象請(qǐng)求引用時(shí)都要檢查是否存在類(lèi)的實(shí)例,將仍然需要一些開(kāi)銷(xiāo)。可以通過(guò)使用靜態(tài)初始化解決此問(wèn)題。
2:可能的開(kāi)發(fā)混淆,使用單例對(duì)象(尤其在類(lèi)庫(kù)中定義的對(duì)象)時(shí),開(kāi)發(fā)人員必須記住自己不能使用new關(guān)鍵字實(shí)例化對(duì)象。因?yàn)榭赡軣o(wú)法訪問(wèn)庫(kù)源代碼,因此應(yīng)用程序開(kāi)發(fā)人員可能會(huì)意外發(fā)現(xiàn)自己無(wú)法直接實(shí)例化此類(lèi)。
3:對(duì)象生存期,不能解決刪除單個(gè)對(duì)象的問(wèn)題。在提供內(nèi)存管理的語(yǔ)言中(例如基于.NET Framework的語(yǔ)言),只有單例類(lèi)能夠?qū)е聦?shí)例被取消分配,因?yàn)樗瑢?duì)該實(shí)例的私有引用