2017-08-10 8 views
0

私が望むことができるかどうか知りたいです。 私はLocaleの値を持っています。その値に応じて、自動的に親のコンストラクタでのみ適切なクラスをインスタンス化したいと思います。例えばロケールの値に応じて適切なクラスをインスタンス化します

:私は、例えばLocale.Franceのために、この

void aMethod() 
{ 
    doSomethings(); 
} 

void doSomethings() 
{ 
    Parent parent = new Parent(); 
    parent.callMethod(); 
} 

とロケールに基づいて操作を行いたいと思います。新しいParent()を呼び出すとChildFRをインスタンス化するようにしたいと思います。

私が十分明確か、Javaで可能かどうか教えてください。すべてのアイデアは大歓迎です。

+0

:よう

// return instance relatively to value of locality parameter CustomFactory.create(String locality) : Parent Parent parent = (new CustomFactory()).create(var); 

たり、ビルダーメソッドのシグネチャと一致するコール? if confitionが必要な場合があります。ロケールに基づいて – arkantos

+0

、たとえばLocale.France。私はChildFRをインスタンス化するようにしたいです – BlueTux

+0

あなたはそれを行うことはできません。 'new Foo()'は常に新しい 'Foo'をインスタンス化します。しかし、現在のロケールを見て、 'new Foo()'または 'new FrenchFoo()'を実行するstatic 'createFoo()'メソッドを追加することで、抽象レイヤーを追加することができます... –

答えて

0

ファクトリパターンまたはビルダーパターン(その主な目的は多形性を助けないが、その可能性があります)を見たい場合があります。

親コンストラクタを呼び出すことによって子をインスタンス化しますが、実行しようとしているものの解決策です(一部の状態や構成に対してインスタンス化する)。

いずれのパターンでも、実装の抽象化(たとえばParent)と抽象化の具体的な実装(ChildFRなどの子供)を定義する必要があります。インスタンス化するジョブは、ファクトリまたはビルダーに委譲され、具体的な実装のインスタンスを変数と比較して返します。

あなたは同様にあなたのファクトリメソッドのシグネチャと一致するコールがあるでしょう:値がどこにあるあなたが、明確ではない

// set locality 
CustomBuilder.locatility(String locality) : CustomBuilder 
// return instance relatively to value of locatily parameter 
CustomBuilder.build() : Parent 

Parent parent = (new CustomBuilder()).locality(var).build(); 
+0

あなたの答えをありがとう。私はちょうどBuilderパターンを見ました。私はそれが本当に私が望むことを行うことができると思う( "If"ステートメントの代わりにインスタンス化ジョブを行うクラス!)。やってみます ! – BlueTux

関連する問題