簡體   English   中英

How to do train composition - 類的組合

[英]How to do train composition - compositon of classes

我目前正在為大學做一個火車模擬項目。

這是我的 class 層次結構:

RollingStock
    Coach
        FreightCoach
        PassengerCoach
        SpecialCoach
    Engine
        DieselEngine
        ElectricEngine
        SteamEngine
    Trainset

我的問題:

  • 每個教練都有一個唯一的 ID。 但是,Engines 和 Trainsets 共享它們的 ID 空間(“系列名稱”)。 “名稱”由RollingStock繼承, TrainsetEngine都具有屬性“系列”。

我創建了一個 class “SharedIdSpace”來實現這個功能。 但我不太確定如何很好地解決這個問題(TreeMap,...,?)。

現在,我的主要問題是我必須實現以下功能:

"機車車輛可以組合成火車。組合時必須遵守以下限制:

  • 在有效列車的起點或終點必須始終至少有一個機車/列車組。
  • 組合時,必須始終考慮機車車輛在所需組合點是否具有合適的聯軸器。
  • 正在組合的機車車輛尚未在另一列火車上使用。 [...]

我該如何實施? 恐怕我沒有什么有用的主意。

我不確定你在問什么,但我會盡量給你我的近似值:

您需要創建一個組合 object,其中每個 object 都有一個唯一的 ID,並且需要通過一些驗證。

我將實現一個“StoregeManager”和一個“ComposerManager”,並在“RollingStock”中添加一個抽象驗證器方法來驗證是否可以添加 vagon。

流程將是這樣的:

DISCLAIMER這是在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()

在 componer 內部,是這樣的:


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 的類名作為參數傳遞。

我希望這可以幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM