我已經我有四種類型的數據對象的情況下:實例化特定亞型
class DataTypeAlpha extends DataType
class DataTypeBeta extends DataType
class DataTypeGamma extends DataType
class DataTypeDelta extends DataType
和來自GUI框架四種不同的樹節點的類型,每一個特定的數據類型包裹:
class AlphaTreeNode extends MyAppTreeNode
...
現在我經常有模式,我有一個DataType的實例,需要一個MyAppTreeNode的新實例。我看到兩個解決方案。解決方法一:
class DataType {
// Instantiates and returns the appropriate MyAppTreeNode for this DataType
abstract MyAppTreeNode createTreeNode();
}
解決方法二:
class MyAppTreeNode {
static MyAppTreeNode createTreeNodeForDataType(DataType dataType) {
if(dataType instanceOf DataTypeAlpha) return new AlphaTreeNode((DataTypeAlpha)dataType)
else if (dataType instanceOf DataTypeBety) return new BetaTreeNode((DataTypeBeta)dataType)
else if ...
else if ...
else throw new IllegalArgumentException();
}
}
解決一個使用多態性,是更短和更 「優雅」。但我更喜歡DataType類沒有關於我使用的GUI框架的知識。也許我甚至可以使用兩種不同的GUI框架?
您是否看到第三種解決方案?我爲這個問題添加了Guice標籤。也許在Guice或其他依賴注入庫中有一些功能可以在這裏幫助?
翻翻類似的問題:
- 當然,我會用這個工廠模式,但在工廠裏面我還是留下的問題。
如何使用泛型和類似的溶劑像通用道? http://insidecoding.com/2011/09/07/the-generic-dao-pattern-in-java-with-spring-3-and-jpa-2-0/ –