gpt4 book ai didi

java - 使用太多 switch case 重构代码

转载 作者:搜寻专家 更新时间:2023-11-01 08:28:52 26 4
gpt4 key购买 nike

我继承了一个需要重构的应用程序。以下让我有些头疼。原始源代码中有太多 switch case,如下所示:

class Girl {
//...
void traditionalMakeUp() {
switch (type) {
case FRENCH:
frenchMakeUp();
break;
case AFRICAN:
africanMakeUp;
break;
case NORWEGIAN:
norwegianMakeUp();
.....

case KOREAN:
koreanMakeUp();
.....
}
}
}

我正在尝试像这样重构它:

abstract class Girl {
//...
abstract void makeUp();
}

class French extends Girl {
void makeUp() {
// makeUP
}
}
class African extends Girl {
void makeUp() {
// makeUP
}
}
class Norwegian extends Girl {
void makeUp() {
// makeUP
}
}

// Somewhere in client code
girl.makeUp();

这是正确的做法吗?如果我的 switch 中没有 20+ case,策略模式就可以了。

此外,我不愿意为了适应策略设计模式而添加 20+ 个类。还有其他重构它的好方法吗?

最佳答案

看起来这里确实需要继承,这取决于您的应用程序中基于属性 typeGirl 存在哪些其他操作/开关。

如果那是唯一的开关,你可以像下面那样做,

使用一个抽象方法 - makeUp() 定义一个枚举 Girl,然后为该枚举类型实现该方法。

public enum Girl {

FRENCH {
public void makeUp() {
Utility.frenchMakeUP();
}
},

AFRICAN {
public void makeUp() {
Utility.africanMakeUP();
}
},

NORWEGIAN {
public void makeUp() {
Utility.norwegianMakeUP();
}
},

KOREAN {
public void makeUp() {
Utility.koreanMakeUP();
}
};

public abstract void makeUp();

}

您的 Utility 类如下所示。

public class Utility {

public static void frenchMakeUP() {

}

public static void africanMakeUP() {

}

public static void norwegianMakeUP() {

}

public static void koreanMakeUP() {

}

}

客户端代码

Girl girl = Girl.FRENCH;
girl.makeUp();

您可以根据存在的功能数量以及如何组合常用功能来组织多个实用程序类,即从 makeUp() 中调用 Utility.koreanMakeUP() 可以进一步组织起来。

关于java - 使用太多 switch case 重构代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42264195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com