0

我目前正在为 uni 做一个火车模拟项目。

这是我的类层次结构:

RollingStock
    Coach
        FreightCoach
        PassengerCoach
        SpecialCoach
    Engine
        DieselEngine
        ElectricEngine
        SteamEngine
    Trainset

我的问题:

  • 每个教练都有一个唯一的 ID。然而,Engines 和 Trainsets 共享它们的 ID-Space(“series-name”)。“名称”由RollingStock继承,并且TrainsetEngine都具有“系列”属性。

我创建了一个类“SharedIdSpace”来实现这个功能。但我不太确定如何很好地解决这个问题(TreeMap,...,?)。

现在,我的主要问题是我必须实现以下功能:

"机车车辆可以编成火车。编组时必须遵守以下限制:

  • 必须始终在有效列车的开始或结束处设置至少一个机车/列车。
  • 组合时,必须始终考虑机车车辆在所需组合点是否具有合适的联轴器。
  • 正在组成的机车车辆尚未在另一列火车上使用。 [...]

我该如何实施?恐怕我没有有用的想法。

4

1 回答 1

0

我不确定你在问什么,但我会尽量给你我的近似:

您需要创建一个复合对象,其中每个对象都有一个唯一的 ID,并且需要通过一些验证。

我将实现一个“StoregeManager”和一个“ComposerManager”,并在“RollingStock”中添加一个抽象验证器方法来验证是否可以添加 vagon。

流程将是这样的:

免责声明这是用Java编写的,但使用notepad++,请不要检查sintaxis。


RollingStock freightCoach = StoregeManager.getFreightCoach();
RollingStock specialCoach = StoregeManager.getSpecialCoach();
RollingStock dieselEngine = StoregeManager.getDieselEngine();

// Check if they are null or throw an exception if has no more elements. Maybe from BBDD or from where you want

Composer.compone()
.add(dieselEngine)
.add(freightCoach)
.add(specialCoach)
.build()

在组件内部,是这样的:


public class Composer {

    private StoregeManager storeManager; //Injected or initialized, as you want.
    private static Train train;

    public Composer build(){
        train = new Train;
        return this;
    }

    public Composer add(RollingStock rs) {
        if(rs.isValid(train))
            train.add(rs);
        return this;
    }

    public RollingStock[] build() {
        storageManager.ckeckTrain(train);
        return train;
    }
}

如果您需要另一个近似于您的问题,您可以将存储放在 Composer 中,并将 vagon 的类名作为参数传递。

我希望这可以帮助你。

于 2020-02-11T12:07:32.227 回答