在解释我的问题之前,我应该做一些理论上的...
对于车辆,我指的是一切可以通过公路运输货物的东西:汽车,货车,卡车,拖车(或公路火车,我不知道正确的用语),半挂车(也称为铰接式卡车或牵引拖车)。
关于汽车,厢式货车和卡车,没有问题:它们具有板,重量和可运输的体积以及其他数据。
但是其他两种车辆则更为复杂。他们可能有一个附加的车牌和其他附加数据。特别是:
半挂牵引车(也称为牵引挂车)是一种复杂的车辆,由公路牵引车和半挂牵引车组成。
挂车(也称为...)是一种复杂的车辆,由驱动部件(汽车,厢式货车,卡车...)和从动部件(拖车,推车附件...)组成。
在欧洲,最多可组装两个零件。
因此,我们还必须处理半挂车,拖车和手推车。
在我的软件中,它们可以以不同的方式相互组装。
例如,我可以拿一辆拖车从拖车中拉出,并只获得一辆卡车和拖车吗?
尽管如此,我还是可以乘坐同一辆卡车,如果兼容的话,还可以攻击另一辆不同的拖车。等等...
在我看来,很明显,我们无法用Class Vehicle来管理所有事情。
我想知道什么是处理所有问题的最佳方法。最初,我在Vehicle类中有一个枚举,向我展示了车辆的类型。但是,即使我必须处理复杂的车辆,也认为它要复杂得多……我也想知道这将如何影响软件的其余部分。
最初,这就是我管理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
// ...
}
我应该如何处理?有继承权吗?
最佳答案
对我而言,可以通过这种方式完成。首先,您创建非常通用的车辆类别,该类别基本上具有车轮数量和名称,也许还有其他名称。然后,将其扩展多次以创建机动车辆,不带电动机的车辆,然后是汽车,卡车等。
此外,您还可以使用可拖曳的界面以及描述某些特殊功能的许多其他界面。这样,您可以通过检查车辆是否实现了所需的接口来检查其兼容性。
希望能帮助到你。祝好运。
关于java - 车辆类别(不同类型)。最佳设计和实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26277305/