如何降低此方法的复杂性?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何降低此方法的复杂性?相关的知识,希望对你有一定的参考价值。
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);
}
}
答案
重构的基本规则是,方法应该足够小以容纳功能
因此,我们可以轻松地重构如下,
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);
}
}
另一答案
使用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中执行类似的操作(通过自己实现所需的类)。但那在我看来会过度工程化。
以上是关于如何降低此方法的复杂性?的主要内容,如果未能解决你的问题,请参考以下文章