リファクタリングが必要なアプリケーションを継承しました。以下は私に頭痛を与えている。元のソースコードは、次のようにあまりにも多くのスイッチの例があります。スイッチケースが多すぎるリファクタリングコード
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();
それはそれを行うための正しい方法ですか?私のスイッチに20以上のケースがない場合、戦略パターンは問題ありません。
さらに、私は戦略デザインパターンに合うように20以上のクラスを追加することを嫌っています。それをリファクタリングする別の良い方法がありますか?
それぞれの変種 'makeUp()'メソッドは何をしますか? – Naros
@Naros makeUp()は国籍によって異なります。ノルウェー語のmakeUp()ロジックはフランス語などのmakeUp()ロジックとはまったく異なります。 –
スイッチのケース数は多かれ少なかれ固定されているか、あるいは成長する可能性はありますか? 'makeUp()'メソッドの平均コード行は何ですか? 'makeUp()'メソッドは他のクラスにも依存していますか、それとも完全に独立したコードですか? –