java车辆类别(不同类型)。最佳设计和实施
在解释我的问题之前,我应该先做一点理论
对于车辆我指的是所有可以通过公路运输货物的东西:汽车,货车,卡车,拖车(或公路列车,我不知道正确的术语),半拖车(也称为铰接式卡车或牵引式拖车)
关于汽车、面包车和卡车,没有问题:它们有一个车牌、一个重量和一个可运输的体积,以及其他数据
但另外两辆车更复杂。他们可能有一个额外的车牌和其他额外的数据。特别是:
半挂车卡车(也称牵引挂车)是一种复杂的车辆,由公路牵引车和半挂车组成
A拖车卡车(也称为……)是一种复杂的车辆,由驱动部件(汽车、面包车、卡车等)构成以及一个驱动部件(拖车、手推车等)。 在欧洲,最多有两个组装件
因此,我们还必须处理半拖车,拖车和推车
在我的软件中,它们可以以不同的方式相互组装。 例如,我可以将一辆拖车从拖车卡车上拉下来,只获得一辆卡车和一辆拖车。 尽管如此,我还是可以乘坐同一辆卡车,如果兼容的话,攻击另一辆不同的拖车。等等
在我看来,很明显,我们不能用一流的汽车来管理一切
我想知道处理这一切的最佳方式是什么。最初,我在Vehicle类中有一个枚举,显示了车辆的类型。但当我不得不处理复杂的车辆时,我相信它要复杂得多。。。我还想知道这将如何影响软件的其余部分
这就是我最初管理车辆类的方式:
public class Vehicle {
// kind of
enum TipoVeicolo {
AUTO, // car
FURGONE, // van
AUTOCARRO, // truck
/*
// for semi-trailer truck:
TRATTORE_STRADALE // road tractor
SEMIRIMORCHIO // semi-trailer
AUTOARTICOLATO // semi-trailer truck
// for trailer truck:
RIMORCHIO // trailer
AUTOTRENO // trailer truck
...
*/
};
enum Stato {
DISPONIBILE, // Available
NON_DISPONIBILE,// not available
IN_VIAGGIO // on road...
// ... ?
}
private String targa; // plate
private String mark;
private Stato stato;
private TipoVeicolo tipoVeicolo;
private float portata;
private float volume;
private short europallet;
//Date immatricolationDate;
//String assurance;
public Vehicle(String targa, TipoVeicolo tipoVeicolo, String mark, Stato stato, float ptt) {
this.targa=targa;
this.tipoVeicolo=tipoVeicolo;
this.mark=mark;
this.stato=stato;
this.ptt=ptt;
}
//////////////////////////////////////////////
// GET and SET methods
// ...
}
我该怎么处理?继承遗产
# 1 楼答案
对我来说可以这样做。首先,你要创建一个非常通用的车辆类,它基本上有很多轮子和名字,也许还有其他的东西。然后将其扩展多次,以创建机动车辆、无机动车辆、汽车、卡车等等
此外,您还可以使用towable接口和许多其他描述某些特殊功能的接口。通过这种方式,您可以通过检查车辆是否实现了所需的接口来检查其兼容性
希望有帮助。祝你好运