【发布时间】:2017-02-16 03:17:59
【问题描述】:
我继承了一个需要重构的应用程序。以下让我有些头疼。原始源代码中有太多类似如下的 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 多个案例,那么策略模式就可以了。
此外,我不愿意为了适应策略设计模式而添加 20 多个类。还有其他重构的好方法吗?
【问题讨论】:
-
每个变体
makeUp()方法的作用是什么? -
@Naros makeUp() 因国籍而异。挪威语中的 makeUp() 逻辑与法语中的 makeUp() 逻辑等完全不同......
-
switch 中的病例数或多或少是固定的还是有可能增加?
makeUp()方法的平均代码行是多少?makeUp()方法也依赖于其他类还是完全独立的代码? -
另外,
Girl中除了makeUp()之外总共有多少方法? -
@SabirKhan switch 中的病例数将继续增长。这就是我想重构它的原因。一个 makeUp() 方法平均有大约 20 行代码。除了 makeUp() 之外,还有大约 26 种其他方法。一团糟!
标签: java android design-patterns refactoring