在解释我的问题之前,我应该做一些理论上的...

对于车辆,我指的是一切可以通过公路运输货物的东西:汽车,货车,卡车,拖车(或公路火车,我不知道正确的用语),半挂车(也称为铰接式卡车或牵引拖车)。

关于汽车,厢式货车和卡车,没有问题:它们具有板,重量和可运输的体积以及其他数据。

但是其他两种车辆则更为复杂。他们可能有一个附加的车牌和其他附加数据。特别是:


半挂牵引车(也称为牵引挂车)是一种复杂的车辆,由公路牵引车和半挂牵引车组成。
挂车(也称为...)是一种复杂的车辆,由驱动部件(汽车,厢式货车,卡车...)和从动部件(拖车,推车附件...)组成。
在欧洲,最多可组装两个零件。


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

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

在我看来,很明显,我们无法用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/

10-12 05:57