特點:
1:一個類只有一個對象
2:必須是類內部自行創建這個對象
3:向整個系統提供這個對象
實現過程:
1:類的構造函數是private
2:類中含有一個該類的靜態私有對象
3:提供一個靜態的公有函數用于創建、獲取本身的靜態私有對象
4:當然還要有一個private的clone方法,防止克隆
優點
1:實例控制,單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。
2:靈活性,因為類控制了實例化過程,所以類可以靈活更改實例化過程
缺點
1:開銷,雖然數量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態初始化解決此問題。
2:可能的開發混淆,使用單例對象(尤其在類庫中定義的對象)時,開發人員必須記住自己不能使用new關鍵字實例化對象。因為可能無法訪問庫源代碼,因此應用程序開發人員可能會意外發現自己無法直接實例化此類。
3:對象生存期,不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠導致實例被取消分配,因為它包含對該實例的私有引用