Я относительно новичок в весне, и меня вырыли в яме.Я пытаюсь моделировать автомобили.Каждая модель имеет свой собственный объект построителя, и у меня есть BuilderFactory, который возвращает правильного построителя на основе выбора пользователя из веб-приложения.
Поэтому я ищу предложения о том, как подойти к этой проблеме, когда мне нужно создать несколько отдельных транспортных средств, но я не знаю, какой тип автомобиля мне понадобится до времени выполненияи каждый автомобиль должен быть уникальным для пользователя.
То, что у меня есть на данный момент, показано ниже.Проблема, с которой я столкнулся на данный момент, заключается в том, что отдельные строители - это одиночные машины, так же как и отдельные транспортные средства.Мне нужно, чтобы они были прототипами.Я знаю, что все выглядит довольно ужасно, поэтому я уверен, что должен быть лучший способ сделать это.
Верхний уровень веб-приложения выглядит так:
Vehicle vehicle = vehicleBuilderFactory.getBuilder(platform).build();
Мой VehicleBuilderFactory выглядит следующим образом;
@Service
public class VehicleBuilderFactory {
@Autowired
Discovery3Builder discovery3Builder;
@Autowired
Discovery4Builder discovery4Builder;
// Lots of @Autowired statements here.
@Autowired
FreeLander2010Builder freeLander2010Builder;
public VehicleBuilder getBuilder(Platform platform) {
switch (platform.getId()) {
case 1: return discovery3Builder;
case 2: return discovery4Builder;
// Lots of case statements here
case 44: return freeLander2010Builder;
default: return null;
}
}
}
, что само по себе выглядит довольно ужасно.Каждый отдельный строитель выглядит так:
@Service
public class DefenderBuilder implements VehicleBuilder {
@Autowired
Defender defender;
// Loads of Defender specific setters ommitted
@Override
public Vehicle build() {
return defender;
}
}
и, наконец, отдельный автомобиль
@Service
@Scope("prototype")
public class Defender extends Vehicle {
}
Основная проблема сейчас заключается в том, что поскольку строители - это одиночные машины, то и машины, и мне нужныони должны быть прототипами, потому что Защитник пользователя А отличается от Защитника пользователя Б.