2009-08-02 3 views
0

J'implémentant des méthodes qui utilisent des instructions de commutation pour distinguer les différents cas:référençant chaque cas d'un passage d'une condition dans une autre méthode en java

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;} 
    } 
} 

Les travaux ci-dessus bien, quand, plus bas dans la la logique métier, j'appelle doThis() dans d'autres méthodes qui ont besoin de la fonctionnalité doThis().

Cependant, à ce moment, je suis un peu confus comment incorporer d'autres conditions/restrictions posées sur chaque cas du commutateur ci-dessus.

Je veux dire, quand je l'appelle doThis() à l'intérieur dire biggerOperation(), j'ai de nouvelles conditions qui doivent être appliquées contre chaque cas du commutateur appartenance à la fonction doThis():

logique Exemple:

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() 
    } 
} 

Je n'ai pas été capable de trouver une façon élégante, propre et compacte de le faire dès maintenant. Y a-t-il des idées peut-être? Comment puis-je cibler explicitement chaque cas d'un commutateur? Puis-je utiliser un nouveau commutateur pour implémenter cette logique conditionnelle?

Toutes les suggestions sont les bienvenues. Appréciez beaucoup votre aide.

Répondre

1

Refactorisez votre commande enum en classes en utilisant le pattern Command.

+0

Merci de votre participation. Si cela ne vous dérange pas, pourriez-vous expliquer un peu plus sur la nouvelle logique? En utilisant le modèle de commande, vous voulez dire encapsuler l'invocation de méthode? – denchr

+2

voir cette question: http://stackoverflow.com/questions/1199646/long-list-of-if-statements-in-java/1199677 –

+0

Oui, il semble assez similaire. Je vous remercie de le faire remarquer! – denchr

0

Vous pouvez commencer à faire quelque chose comme

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(); 
} 

Ensuite, faites un peu plus refactoring. Mais je pense que c'est un bon point de départ (vu que vous n'êtes pas ennuyé avec 4 imbriqués si elses et 4 switch cases).

+0

cela semble prometteur. Je vais essayer! – denchr

Questions connexes