次のようなメソッドがあるとしましょう:
public void sketch(Shape shape){
switch(shape.getType){
case CIRCLE:
Circle circle = (Circle)shape;
circle.drawCircle();
break;
case RECTANGLE:
Rectangle rectangle= (Rectangle)shape;
rectangle.drawRectanle();
break;
}
}
上記のコードは、Shape
自分自身を描画する方法を知っているインターフェースを持つことで簡単にリファクタリングできます。次に、具象クラスがCircle
とRectangle
を実装しdraw()
ます。上記のクライアント コードは、次のようになります (前のスニペットよりもはるかに読みやすく、整理されています)。
public void sketch(Shape shape){
shape.draw();
}
だから私の質問は、ポリモーフィズムをサポートするオブジェクト指向言語でのswitchの使用法に関するものです。それは常にアンチパターンと見なされますか? スイッチが命の恩人になる状況はありますか?