私は 4 種類のデータ オブジェクトがあるとします。
class DataTypeAlpha extends DataType
class DataTypeBeta extends DataType
class DataTypeGamma extends DataType
class DataTypeDelta extends DataType
GUI フレームワークからの 4 つの異なる TreeNode タイプで、それぞれがラップされた DataType に固有です。
class AlphaTreeNode extends MyAppTreeNode
...
現在、DataType のインスタンスがあり、MyAppTreeNode の新しいインスタンスが必要であるというパターンがよくあります。私は2つの解決策を見ています。解決策 1:
class DataType {
// Instantiates and returns the appropriate MyAppTreeNode for this DataType
abstract MyAppTreeNode createTreeNode();
}
解決策 2:
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();
}
}
ソリューション 1 はポリモーフィズムを使用し、より短く、より「エレガント」です。しかし、DataType クラスには、私が使用している GUI フレームワークに関する知識がないようにしたいと思います。2 つの異なる GUI フレームワークを使用することもできますか?
3 つ目の解決策はありますか? この質問に Guice タグを追加しました。たぶん、ここで役立つ Guice または別の依存性注入ライブラリの機能があるでしょうか?
同様の質問に目を通す:
- もちろん、これにはファクトリー パターンを使用しますが、ファクトリー内ではまだ疑問が残ります。