java - 如何摆脱实例?
问题描述
有人告诉我,在下面的代码中使用 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();
}
解决方案
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
}
}
其他车以此类推
推荐阅读
- angularjs - Angular js选择重置
- sql-server - 向存储过程添加第二个 if else 语句
- javascript - react-native:如何在平面列表中呈现复选框
- swift - 如何为结果枚举编写扩展
- python - 需要使用 Python 3x 从 JSON 文件转换为 DDL 语句
- c# - 如何在图表内外添加标签
- javascript - 不允许删除多选选项中的最后一个值 - select2
- python - 试图建立一个多项选择测验,但分数不断重置
- neo4j - Cypher - 如何列出每个当前节点的历史节点
- c - 为某些输入注册屏幕边界时出现问题(下和右)