首页 > 解决方案 > 如何摆脱实例?

问题描述

有人告诉我,在下面的代码中使用 instanceof 是不好的做法,因为它变得重复并且难以扩展。虽然我对 Java 很陌生,并没有立即看到我的替代方案是什么,你会建议我做什么来摆脱实例和抽象代码?

void moveit(Vehicle car) {
        if(car instanceof Volvo240){
            volvoPoint.x = (int) car.getXCoordinate();
            volvoPoint.y = (int) car.getYCoordinate();
        }
        if(car instanceof Scania) {
            scaniaPoint.x = (int) car.getXCoordinate();
            scaniaPoint.y = (int) car.getYCoordinate() + 100;
        }
        if(car instanceof Saab95) {
            saabPoint.x = (int) car.getXCoordinate();
            saabPoint.y = (int) car.getYCoordinate() + 200;
        }
        repaint();
    }

标签: javaoopinstanceof

解决方案


InstanceOf 将使推出新型汽车变得困难。您将必须找到您进行这些实例检查并使用新车进行修改的所有位置。参见“开放扩展,封闭修改”原则。

你应该有一个界面

interface Vehicle {
  Integer getXCoordinate();
  Integer getYCoordinate();
  void moveIt(Point point);
}

以及三种实现方式,Saab95、Volvo240 和 Scania

class Saab95 implements Vehicle {
   moveIt(Point point) {
      point.x = getXCoordinate();
      point.y= getYCoordinate() + 200
   }
}

其他车以此类推


推荐阅读