有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    对我来说可以这样做。首先,你要创建一个非常通用的车辆类,它基本上有很多轮子和名字,也许还有其他的东西。然后将其扩展多次,以创建机动车辆、无机动车辆、汽车、卡车等等

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

    希望有帮助。祝你好运