どの実装/サブクラスをインスタンス化するかを選択するとき、特にインターフェイスが静的メソッドを持つことができるようになったことを考えると、if
/をどこに置くべきかについては明確ではありません。switch
インターフェイスといくつかの実装によって定義されたタイプのサービスがあるとしましょう。そのロジックをサービスに入れるのではなく、ファクトリメソッドにしたほうがいいのではないでしょうか。しかし、この回答で提案されているように、パラメーターから型へのマップを使用して、インターフェイスまたは別のクラスに配置する必要がありますか?
それをインターフェースに入れるのは私には自然に思えます:
public interface MyInterface
{
public void doSomething();
public static MyInterface create(int param)
{
if (param == 0)
return new ImplA();
else
return new ImplB();
}
}
次に、サービスから呼び出すだけです。
public class MyService
{
public void serveMe(int param)
{
MyInterface.create(param).doSomething();
}
}
しかし、インターフェースがその実装について知っているのが悪いのか、それとも親クラスがそのサブタイプについて知っているのが悪いのかはわかりません。そう
- そのロジックをどこに置くべきですか?
- タイプのサブクラスを選択している場合、それは大きく変わりますか?