次の2つのアプローチのどちらが良いでしょうか?通常の場合、サブタイプpolymorphishmが最良のアプローチであるため、列挙型を選択しました。また、これは単純なファクトリメソッドを作成する場合の一般的なアプローチです。
public class SomeClass {
public SomeEnum returnAType(String someString) {
//implementation bellow
}
private boolean method1() {
//...
}
private boolean method2() {
//...
}
private boolean method3() {
//...
}
}
returnATypeMethodの最初の実装。method1が有効な場合、method2とmethod3(および場合によってはそれ以上)を呼び出さないため、これはより高速です。
public SomeEnum returnAType(String someString) {
if(method1(someString)) {
SomeEnum.ENUM1.doSomething();
return SomeEnum.ENUM1;
}
if(method2(someString)) {
SomeEnum.ENUM2.doSomething();
return SomeEnum.ENUM2;
}
if(method3(someString)) {
SomeEnum.ENUM3.doSomething();
return SomeEnum.ENUM3;
}
SomeEnum.DEFAULT_ENUM.doSomething();
return SomeEnum.DEFAULT_ENUM;
}
returnATypeMethodの2番目の実装。これはより明確で、コードの重複はありません。
public SomeEnum returnAType(String someString) {
SomeEnum enumType = SomeEnum.DEFAULT_ENUM;
if(method1(someString)) {
enumType = SomeEnum.ENUM1;
}
if(method2(someString)) {
enumType = SomeEnum.ENUM2; }
}
if(method3(someString)) {
enumType = SomeEnum.ENUM3;
}
enumType.doSomething();
return enumType;
}