ссылаясь на каждый случай перехода от условного внутри другого метода в Java - PullRequest
0 голосов
/ 02 августа 2009

Я реализую некоторые методы, которые используют операторы switch для различения разных случаев:

private void doThis(){
    switch(command){
    case on: {status = doCalculationsA; break;}
    case off: {status = doCalculationsB; break;}
    case idle: {status = doCalculationsC; break;}
    case stdby:{status = doCalculationsD; break;}   
    }
}

Вышеописанное прекрасно работает, когда, далее вглубь бизнес-логики, я вызываю doThis () внутри других методов, которым требуется функциональность doThis ().

Однако в этот момент я немного запутался, как включить другие условия / ограничения, установленные для каждого случая вышеуказанного переключателя.

Я имею в виду, что когда я вызываю doThis () внутри скажем

Пример логики:

biggerOperation(){

    doThat();
    doTheOther();

    if(somethingIsTrue){
      execute "case: on" of doThis()
    }
    else if(somethingElseIsTrue){
      execute "case: off" of doThis()
    }
    else if(aThirdThingIsTrue){
      execute "case: idle" of doThis()
    }
    else if(aFourthThingIsTrue){
      execute "case: stdby" of doThis()
    }
}

На данный момент мне не удалось найти изящный, чистый и компактный способ сделать это. Возможно, есть какие-нибудь идеи? Как я могу явно ориентироваться на каждый случай переключения? Могу ли я использовать новый переключатель для реализации этой условной логики?

Любые предложения приветствуются. Очень ценю вашу помощь.

Ответы [ 2 ]

1 голос
/ 02 августа 2009

Переведите ваше перечисление команд в классы, используя шаблон Command.

0 голосов
/ 02 августа 2009

Вы можете начать делать что-то вроде

public MyCreatedEnum getCommand() {
    if(somethingIsTrue){
      return MyCreatedEnum.on;
    }
    else if(somethingElseIsTrue){
      return MyCreatedEnum.off
    }
    else if(aThirdThingIsTrue){
      return MyCreatedEnum.idle
    }
    else if(aFourthThingIsTrue){
      return MyCreatedEnum.stdby
    }
}

private void doThis(){
    MyCreatedEnum command = getCommand();
    switch(command){
    case MyCreatedEnum.on: {status = doCalculationsA; break;}
    case MyCreatedEnum.off: {status = doCalculationsB; break;}
    case MyCreatedEnum.idle: {status = doCalculationsC; break;}
    case MyCreatedEnum.stdby:{status = doCalculationsD; break;}   
    }
}

public void biggerOperation(){
    doThat();
    doTheOther();
    doThis();
}

Тогда сделайте еще один рефакторинг. Но я думаю, что это хорошая отправная точка (учитывая, что вас не раздражают 4 вложенных if Elses и 4 переключателя).

...