3 回答

TA貢獻1821條經驗 獲得超5個贊
在保護單身人士方面:
它們沒有全局變量那么糟糕,因為全局變量沒有標準強制的初始化順序,并且您可以輕松地看到由于天真或意外的依賴順序而導致的不確定性錯誤。單身人士(假設他們在堆上被分配)是在所有全局變量之后創建的,并且在代碼中的一個非??深A測的位置。
它們對資源惰性/緩存系統非常有用,例如慢速I / O設備的接口。如果您智能地為慢速設備構建單獨的接口,并且沒有人調用它,那么您將不會浪費任何時間。如果另一段代碼從多個位置調用它,您的單例可以同時優化兩者的緩存,并避免任何雙重查找。您還可以輕松避免單例控制資源上的任何死鎖條件。
反對單身人士:
在C ++中,單身后沒有很好的自動清理方法。 有一些解決方法和稍微有些方法可以做到這一點,但是沒有簡單,通用的方法來確保你的單例的析構函數總是被調用。對于這個目的而言,這并不是一個非常可怕的記憶 - 只是將其視為更多的全局變量。但是,如果您的單例分配其他資源(例如鎖定某些文件)并且不釋放它們,則可能會很糟糕。
我自己的意見:
我使用單身人士,但如果有合理的選擇,請避開它們。到目前為止,這對我來說效果很好,而且我發現它們是可測試的,盡管測試的工作稍微多一些。

TA貢獻1827條經驗 獲得超8個贊
Google有一個針對Java 的Singleton Detector,我認為這個工具必須在Google生成的所有代碼上運行。刪除單身人士的簡單原因:
因為它們可以使測試變得困難并且可以隱藏您的設計問題
有關更明確的解釋,請參閱Google的“ 為什么單身人士有爭議 ”。

TA貢獻1848條經驗 獲得超10個贊
單身人士只是一件化裝的全球變數。
全局變量有它們的用途,就像單身一樣,但是如果你認為你正在用單例而不是使用一個令人討厭的全局變量做一些很酷且有用的東西(每個人都知道全局變量是壞的mmkay),你不幸會被誤導。
- 3 回答
- 0 關注
- 548 瀏覽
添加回答
舉報