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