2012-10-22 55 views
0


我必須使用工廠模式與單身。 我的工廠類根據枚舉類型創建兩個不同的對象。Java工廠模式與枚舉

什麼是返回正確對象的最佳方式。在工廠用的if-else決定:

溶液1

if(enumType == "objectA") return new objectA() 

解決方案2:枚舉類有一個復位功能:

enum ObjectType{ ObjectA{ .. return new ObjectA()..}} 

THX,麥克

+0

對不起,我有麻煩編輯這篇文章。我忘了:你好:) – micho

+0

我更喜歡解決方案2,但如果你堅持解決方案1,我認爲使用'switch'語句會稍微好一點。 – emory

回答

7

寫枚舉上的一個函數。這樣,當你添加一個新的枚舉時,你將不會忘記爲你的工廠方法添加一個子句。通常情況下,我傾向於在幾乎任何解決方案的if/else if等的序列上使用多態性和方法實現。它更不容易出錯,並且在編譯時會捕獲問題,而不是運行時。

+0

如果'enum'不在你的控制之下,那麼我可以考慮不這樣做的唯一原因,這可能不是這裏的情況。 – emory

+0

如果在枚舉成員上有很多不同的方式分派,並且每個方法在代碼中只使用一次,那麼'switch'比方法派遣好。儘管如此,這在實踐中相當罕見。 –

0

如果你只能有一個類的兩個實例,我會使用一個枚舉,除非它需要另一個類作爲一個超類。