如何降低此方法的复杂性?

问题描述 投票:-3回答:2

PS:CONST * - * =>常量

我需要使用Java 7语法来降低此方法的复杂性。

public void myMethod(){
    if(condition1){
       menu.addItem(CONSTA-1);
    }
    if(condition2){
        menu.addItem(CONSTB-1);
    }
    if(condition3){
        menu.addItem(CONSTC-1);
        menu.addItem(CONSTC-2);
    }
    if(condition4){
        menu.addItem(CONSTD-1);
    }
    if(condition5){
        menu.addItem(CONSTE-1);
    }
}
java java-ee java-7
2个回答
1
投票

重构的基本规则是,方法应该足够小以容纳功能

因此,我们可以轻松地重构如下,

public void myMethod(){
  addMenuCondition1(menu);
  addMenuCondition2(menu);
  addMenuCondition3(menu);
  addMenuCondition4(menu);
  addMenuCondition5(menu);
}
public void addMenuCondition1(Menu menu) {
   if(condition1){
       menu.addItem(CONSTA-1);
    }
}
public void addMenuCondition2(Menu menu) {
 if(condition2){
        menu.addItem(CONSTB-1);
    }
}
public void addMenuCondition3(Menu menu) {
 if(condition3){
        menu.addItem(CONSTC-1);
        menu.addItem(CONSTC-2);
    }
}
public void addMenuCondition4(Menu menu) {
  if(condition4){
        menu.addItem(CONSTD-1);
    }
}
public void addMenuCondition5(Menu menu) {
   if(condition5){
        menu.addItem(CONSTE-1);
    }
}

1
投票

使用Java 8,您可以考虑使用List<Pair<Predicate, List<MenuItem>> thingy。

换句话说:当可以将每个条件提取到独立的Predicate对象中时,您可以执行以下操作:

for (Pair<Predicate, List<MenuItem> pair : thatList) {
  if (pair.first().test()) {
    pair.second().foreach(menu::addItem);

含义:迭代所有条件,对于第一个匹配,您检索相应的菜单项并添加它们。其中关键的部分是想要一个理智的方式来实际让每个test()正确的事情。

您可以在Java7中执行类似的操作(通过自己实现所需的类)。但那在我看来会过度工程化。

© www.soinside.com 2019 - 2024. All rights reserved.