亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單身人士:好的設計還是拐杖?

單身人士:好的設計還是拐杖?

holdtom 2019-08-30 16:20:25
單身人士是一個備受爭議的設計模式,所以我對Stack Overflow社區對它們的看法感興趣。請提供您的意見的原因,而不僅僅是“單身人士是懶惰的程序員!”這是一篇關于這個問題的相當不錯的文章,盡管它反對使用Singletons: scientificninja.com:performant-singletons。有沒有人對他們有任何其他好文章?也許是為了支持單身人士?
查看完整描述

3 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

在保護單身人士方面:

  • 它們沒有全局變量那么糟糕,因為全局變量沒有標準強制的初始化順序,并且您可以輕松地看到由于天真或意外的依賴順序而導致的不確定性錯誤。單身人士(假設他們在堆上被分配)是在所有全局變量之后創建的,并且在代碼中的一個非??深A測的位置。

  • 它們對資源惰性/緩存系統非常有用,例如慢速I / O設備的接口。如果您智能地為慢速設備構建單獨的接口,并且沒有人調用它,那么您將不會浪費任何時間。如果另一段代碼從多個位置調用它,您的單例可以同時優化兩者的緩存,并避免任何雙重查找。您還可以輕松避免單例控制資源上的任何死鎖條件。

反對單身人士:

  • 在C ++中,單身后沒有很好的自動清理方法。 有一些解決方法和稍微有些方法可以做到這一點,但是沒有簡單,通用的方法來確保你的單例的析構函數總是被調用。對于這個目的而言,這并不是一個非常可怕的記憶 - 只是將其視為更多的全局變量。但是,如果您的單例分配其他資源(例如鎖定某些文件)并且不釋放它們,則可能會很糟糕。

我自己的意見:

我使用單身人士,但如果有合理的選擇,請避開它們。到目前為止,這對我來說效果很好,而且我發現它們是可測試的,盡管測試的工作稍微多一些。


查看完整回答
反對 回復 2019-08-30
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

Google有一個針對Java 的Singleton Detector,我認為這個工具必須在Google生成的所有代碼上運行。刪除單身人士的簡單原因:


因為它們可以使測試變得困難并且可以隱藏您的設計問題


有關更明確的解釋,請參閱Google的“ 為什么單身人士有爭議 ”。


查看完整回答
反對 回復 2019-08-30
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

單身人士只是一件化裝的全球變數。

全局變量有它們的用途,就像單身一樣,但是如果你認為你正在用單例而不是使用一個令人討厭的全局變量做一些很酷且有用的東西(每個人都知道全局變量是壞的mmkay),你不幸會被誤導。


查看完整回答
反對 回復 2019-08-30
  • 3 回答
  • 0 關注
  • 548 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號