如何降低这种方法的复杂性?
How to reduce complexity of this method?
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 8,你可以考虑使用 List<Pair<Predicate, List<MenuItem>>
东西。
换句话说:当可以将每个条件提取到独立的 Predicate 对象中时,您可以执行以下操作:
for (Pair<Predicate, List<MenuItem> pair : thatList) {
if (pair.first().test()) {
pair.second().foreach(menu::addItem);
含义:您迭代所有条件,并且对于第一个匹配项,您检索相应的菜单项并添加它们。关键的部分是想出一个理智的方法来实际让每个 test()
正确的事情。
您可以在 Java7 中做类似的事情(通过自己实现所需的 类)。但在我看来,那是 过度设计 的事情。
Basic rule for refactoring is, method should be small enough to accommodate functionality
因此我们可以像下面这样轻松重构,
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);
}
}
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 8,你可以考虑使用 List<Pair<Predicate, List<MenuItem>>
东西。
换句话说:当可以将每个条件提取到独立的 Predicate 对象中时,您可以执行以下操作:
for (Pair<Predicate, List<MenuItem> pair : thatList) {
if (pair.first().test()) {
pair.second().foreach(menu::addItem);
含义:您迭代所有条件,并且对于第一个匹配项,您检索相应的菜单项并添加它们。关键的部分是想出一个理智的方法来实际让每个 test()
正确的事情。
您可以在 Java7 中做类似的事情(通过自己实现所需的 类)。但在我看来,那是 过度设计 的事情。
Basic rule for refactoring is, method should be small enough to accommodate functionality
因此我们可以像下面这样轻松重构,
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);
}
}