Я не уверен в том, что вы спрашиваете, но я постараюсь дать вам мое приближение:
Вам нужно создать составной объект, где каждый объект имеет уникальный идентификатор и должен пройти некоторые проверки.
Я бы реализовал «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 и передать в качестве аргумента имя класса вагона, если вам нужно еще одно приближение к вашей проблеме.
Надеюсь, это поможет вам.