На самом деле, если вы хотите, чтобы ваши условия if были видны в вызывающем методе, ваш код является лучшим вариантом, чем решение, предложенное для реализации условий if.Все эти операторы if-else и внутренние операторы if-else делают менее очевидными условия, запускающие каждую операцию.Таким образом, вы можете сохранить свой подход.См. это сообщение в блоге от Джеффа Этвуда
Одно небольшое улучшение, которое вы можете сделать, - это извлечь методы из условий if и назвать новые методы так, чтобы документировать ваши решения:
if( isYouHaveACarAndEnoughGas(A, b)) { //operation to drive}
if( isYouHaveACarAndNoGas(A, b)) { //operation to walk}
...
private boolean isYouHaveACarAndEnoughGas(...){ return A != null && B != null; }
Если вы хотите / хотите что-то более причудливое, вы можете использовать шаблон команды или стратегию.Как правило, повторяющиеся операторы if-else или переключатели являются признаками того, что вы можете использовать полиморфизм для получения того же результата.Смотрите этот отличный пост с примерами .
interface Operation{
void execute();
}
class OperationBuilder {
public static Operation build(TypeA A, TypeB B){
if(A != null && B != null) { return new OperationOne(); }
if(A == null && B == null) { return new OperationTwo(); }
if(A != null && B == null) { /* operation3 */ }
if(A == null && B != null) { /* operation4 */ }
}
class OperationOne implements Operation{
private OperationOne(){...}
@Override
void execute(){...}
}
class OperationTwo implements Operation{
private OperationTwo(){}
@Override
void execute(){...}
}
}
Чтобы использовать это, вы просто
Operation op = OperationBuilder.build(A, B) ;
op.execute();
А вот почему это может быть лучше, чем выначало .Представьте, что у вас есть
if(codition1){
//complicated stuff here that makes you scroll and scroll
}
if(codition2){
//complicated stuff here that makes you scroll and scroll
}
etc
Скорее всего, вы не увидите все условия на одном экране, поэтому потеряете представление о происходящем.С другой стороны, строитель поддерживает все условия в строгом и чистом виде, а логика работы снова отделена от шума.