有太多的if else 和Switch case怎么重构, 请举个例子
时间: 2024-03-16 14:46:48 浏览: 88
Spring如何消除代码中的if-else/switch-case
当代码中存在大量的if else和Switch case语句时,可以使用多态和策略模式来进行重构。在多态和策略模式中,我们将每个条件分支封装成一个单独的类,并将这些类的对象作为参数传递给主函数。
举个例子,假设我们有一个处理不同形状的程序。在原始代码中,可能会使用if else或Switch case语句来根据形状类型执行相应的操作:
```
if (shapeType == ShapeType.Circle) {
Circle circle = (Circle) shape;
circle.draw();
} else if (shapeType == ShapeType.Rectangle) {
Rectangle rectangle = (Rectangle) shape;
rectangle.draw();
} else if (shapeType == ShapeType.Triangle) {
Triangle triangle = (Triangle) shape;
triangle.draw();
} else {
throw new IllegalArgumentException("Invalid shape type: " + shapeType);
}
```
通过多态和策略模式,我们可以将每个条件分支封装成一个单独的类,并将这些类的对象作为参数传递给主函数:
```
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
// draw circle
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
// draw rectangle
}
}
public class Triangle implements Shape {
@Override
public void draw() {
// draw triangle
}
}
public class ShapeDrawer {
private final Shape shape;
public ShapeDrawer(Shape shape) {
this.shape = shape;
}
public void draw() {
shape.draw();
}
}
```
现在,我们可以根据不同的形状类型创建不同的ShapeDrawer对象,并调用它们的draw方法:
```
ShapeDrawer circleDrawer = new ShapeDrawer(new Circle());
circleDrawer.draw();
ShapeDrawer rectangleDrawer = new ShapeDrawer(new Rectangle());
rectangleDrawer.draw();
ShapeDrawer triangleDrawer = new ShapeDrawer(new Triangle());
triangleDrawer.draw();
```
这样,我们就能够通过多态和策略模式来避免使用大量的if else和Switch case语句,使代码更加简洁和易于维护。
阅读全文