Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 车辆类别(不同类型)。最佳设计和实施_Java_Polymorphism - Fatal编程技术网

Java 车辆类别(不同类型)。最佳设计和实施

Java 车辆类别(不同类型)。最佳设计和实施,java,polymorphism,Java,Polymorphism,在解释我的问题之前,我应该先做一点理论 对于车辆而言,我指的是能够通过公路运输货物的一切:轿车、面包车、卡车、拖车(或公路列车,我不知道正确的术语)、半拖车(也称为铰接式卡车或牵引拖车) 关于汽车、货车和卡车,没有问题:它们有一个车牌、一个重量和一个可运输的体积以及其他数据 但另外两辆车更复杂。他们可能有一个额外的车牌和其他额外的数据。特别是: 半挂车卡车(也称为牵引挂车)是一种复杂的车辆,由公路牵引车和半挂车组成 拖车卡车(也称为…)是一种复杂的车辆,由驱动部件(汽车、厢式货车、卡车…)和驱

在解释我的问题之前,我应该先做一点理论

对于车辆而言,我指的是能够通过公路运输货物的一切:轿车、面包车、卡车、拖车(或公路列车,我不知道正确的术语)、半拖车(也称为铰接式卡车或牵引拖车)

关于汽车、货车和卡车,没有问题:它们有一个车牌、一个重量和一个可运输的体积以及其他数据

但另外两辆车更复杂。他们可能有一个额外的车牌和其他额外的数据。特别是:

  • 半挂车卡车(也称为牵引挂车)是一种复杂的车辆,由公路牵引车和半挂车组成

  • 拖车卡车(也称为…)是一种复杂的车辆,由驱动部件(汽车、厢式货车、卡车…)和驱动部件(拖车、手推车…)组成。 在欧洲,最多有两个组装件

因此,我们还必须处理半拖车、拖车和手推车

在我的软件中,它们可以以不同的方式相互组装。 例如,我可以拿一辆拖车并将其从拖车卡车上拉下来,只获得一辆卡车和拖车。 尽管如此,我还是可以乘坐同一辆卡车,如果兼容的话,攻击另一辆不同的拖车。等等

在我看来,很明显,我们不能用一流的汽车来管理一切

我想知道处理这一切的最佳方法是什么。最初,我在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

    // ...
}

我该怎么处理?继承?

对我来说,可以这样做。首先,您创建了非常通用的vehicle类,它基本上包含了车轮数量、名称以及其他一些内容。然后将其扩展多次,以创建机动车辆、无机动车辆、汽车、卡车等

此外,您还可以使用接口towable和许多其他描述某些特殊功能的接口。这样,您可以通过检查车辆是否实现了所需的接口来检查其兼容性


希望能有帮助。祝你好运。

基本上有无限的可能性。就我个人而言,我的做法有些不同,因为汽车也可以拉动拖车。看到我要去哪里了吗?我要做的是有一个车辆模块类和一个车辆类。vehicle类将有一组车辆模块,这样您就可以管理任何类型的组合。@DaveNewton是的,一辆车也可以拉拖车。或者不是。如果你移走了拖车,他的拖车就不再是拖车了,只有一辆卡车。如果您从半挂车卡车上卸下半挂车,您只能获得一辆公路牵引车。应该尽可能接近真实的描述我遵循这一点,似乎是个好主意:目前没有问题。很快我会描述它是如何进行的。