Как сделать композицию поезда - составление классов - PullRequest
0 голосов
/ 11 февраля 2020

Я сейчас работаю над проектом симуляции поезда для университета.

Это моя иерархия классов:

RollingStock
    Coach
        FreightCoach
        PassengerCoach
        SpecialCoach
    Engine
        DieselEngine
        ElectricEngine
        SteamEngine
    Trainset

Мои вопросы:

  • Каждый тренер имеет уникальный идентификатор. Тем не менее, Двигатели и Trainsets разделяют их ID-Space («имя-серии»). «Имя» наследуется RollingStock , и оба Trainset и Engine имеют атрибут «серия».

Я создал класс "SharedIdSpace" для реализации этой функции. Но я не совсем уверен, как решить эту проблему (TreeMap, ...,?).

Теперь моя главная проблема заключается в том, что я должен реализовать следующую функцию:

" Подвижной состав может быть составлен в поезд. При составлении должны соблюдаться следующие ограничения:

  • В начале или конце всегда должен быть хотя бы один локомотив / поезд действующего поезда.
  • При составлении необходимо всегда учитывать, имеет ли подвижной состав подходящую муфту в нужной точке состава.
  • Составляемый подвижной состав еще не использовался в другом поезде. [...]"

Как это реализовать? Боюсь, у меня нет никакой полезной идеи.

1 Ответ

0 голосов
/ 11 февраля 2020

Я не уверен в том, что вы спрашиваете, но я постараюсь дать вам мое приближение:

Вам нужно создать составной объект, где каждый объект имеет уникальный идентификатор и должен пройти некоторые проверки.

Я бы реализовал «StoregeManager» и «ComposerManager» и добавил в «RollingStock» метод абстрактного валидатора, который проверяет, можно ли добавить вагон.

Поток будет выглядеть примерно так:

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Это написано в Java, но с Notepad ++, пожалуйста, не проверяйте синтаксис.


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 и передать в качестве аргумента имя класса вагона, если вам нужно еще одно приближение к вашей проблеме.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...