2009-08-02 121 views
0

從條件引用不同的方法內的交換機的每個情況下,我實現一些方法,其使用開關語句不同的情況之間進行區分:在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;} 
    } 
} 

上述正常工作的時候,進一步向下業務邏輯,我在其他需要doThis()功能的方法中調用doThis()。

但是,現在我有點困惑,如何納入上述開關的每種情況下提出的其他條件/限制。

我的意思是,當我打電話內doThis()說biggerOperation(),我有需要針對在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() 
    } 
} 

我還沒有能夠找出一個優雅,乾淨,緊湊的方式來做到這一點。也許有什麼想法?我如何明確地針對交換機的每個案例?我可以使用新的開關來實現該條件邏輯嗎?

歡迎任何建議。非常感謝你的幫助。

回答

1

將命令枚舉重構爲使用命令模式的類。

+0

感謝您的輸入。如果你不介意的話,你能否多解釋一下新的邏輯?使用命令模式,你的意思是封裝方法調用? – denchr 2009-08-02 14:46:31

+2

看到這個問題:http://stackoverflow.com/questions/1199646/long-list-of-if-if-statements-in-java/1199677 – 2009-08-02 14:51:24

0

你可以開始做這樣

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個嵌套如果elses和4個開關情況而煩惱)。