2009-08-28 44 views
2

類的「單一性」是如何使用類的一個重要方面。但是,它通常在暴露的類的API中沒有任何明確的狀態。是的,通常會使用傳統的方法名稱,例如getInstance(),但這不完全是我在這裏提到的。Singletons的標籤接口

「標籤接口」是一個不包含方法或數據的接口。標籤界面的一個例子是Serializable

爲singleton定義標籤接口沒有用嗎?這將:

  • 允許他們在項目
  • 的代碼庫可以很容易地識別更明確
  • 提供一個場所來記錄單身應該如何處理。舉一個例子,可以提到長壽命對象是內存泄漏的富有成效的來源,並且該單例不應該連接到短壽命對象。

這是一個簡單的想法,但我從來沒有見過任何地方提及。

+0

我認爲'Serializable'接口被認爲是一個壞主意。與單身人士不同。 – 2009-08-29 00:49:03

+0

是否使用它們的問題與這裏提出的問題是切線的。誠然,單身人士有缺點。但是,如果您使用它們 - 出於任何原因 - 是否最好使用Singleton標籤界面? – 2009-08-29 01:48:21

回答

2

你已經踏入這裏的宗教戰爭,但對我來說,你的想法似乎有優點。只要有單身人士,我認爲如果編譯器和JVM可以強制他們的原子單一性會很好。

的問題是,單身已成爲有爭議的,因爲它們容易被濫用。人們反對他們的使用指向祕密的全球國家,隱藏的依賴和大規模過度使用。

沒有這些,當然,在辛格爾頓的煩躁的概念實際上是固有的,但不改變爭議。

你的情況下,這裏沒有使用序列化的幫助,因爲湯姆指出,這本身就有爭議。當然,Serializable被認爲是一些作家的錯誤並不一定如此。就我個人而言,我並不使用它,但不是因爲我認爲這本身就是一個錯誤......我只是發現有更好的方法來堅持和檢索更符合我用戶需求的狀態。

有,當然,其他標記接口 - Cloneable的,EventThreadListener和SingleThreadModel的,如果沒有記錯。如果您將它們用作模型,則可能會更進一步。

順便說一句,我認爲大多數作家指的是你所謂的「標記接口」作爲「標記接口」。沒什麼大不了的,但它可能有助於您尋找關於該主題的其他想法。

1

這是一個有趣的想法,但我不知道它是多麼有用。你的第三個要點是一個很好的觀點。

更好的說法可能是「爲什麼單身人士?」你肯定會讓Google Singleton Detector更容易找到它們並將它們識別出來進行滅絕。他們的FAQ可以詳細表達我的觀點。

0

爲什麼不使用DI/IoC容器並讓它管理對象的生命週期?正如你所說,一個類的生命週期不需要反映在它的公共接口中。

0

我同意上面關於使用DI框架來處理對象生命週期的TrueWill。使用Guice會給你一個Singleton註釋來標記這些singtons。:)