Сценарий
Я делаю программу на Java, в которой используются автомобили.
ПРИМЕЧАНИЕ: Я упростил этот сценарий (в меру своих возможностей), чтобы сделать его более общим и легким для понимания. . На самом деле я не работаю с автомобилями.
Я создал класс Cars
, который представляет собой набор объектов Car
.
Car
obj ect имеет скорость
(двойной) и год
(int). Конструктор принимает в качестве параметра год, например:
public class Car {
private int year;
private double speed;
public Car(int year) {
this.year = year;
}
}
Вот сложная часть ... Автомобиль должен иметь вид (скажем, Corvette или Clunker). Корвет будет иметь скорость
0,9
, а драндулет будет иметь скорость
0,1
. Автомобиль
никогда не может быть создан без указания типа автомобиля. Итак, теперь, чтобы создать автомобиль, у нас есть:
Car car = new Car(1998, Corvette);
Corvette, который мы только что создали, будет объектом Car
со скоростью
0,9
.
Проблема
Моя реальная ситуация включает в себя гораздо больше видов автомобилей, и каждая машина имеет несколько специфических атрибутов помимо скорости
(возможно, есть также поля для цвета
, ] numDoors
и fuelTankSize
). С таким количеством типов автомобилей (каждый со своими особыми атрибутами) код становится более сложным, чем мне хотелось бы.
Возможные решения
Я мог бы работать с подклассами, то есть иметь абстрактный класс Автомобиль
, который расширен Corvette
и Clunker
, но тогда У меня проблема с использованием объекта Cars
(потому что я не могу создать коллекцию чего-то, что не может быть создано). См. ИЗМЕНИТЬ ниже.
Использование перечисления (например, CarKind
), по-видимому, требует нескольких беспорядочных операторов switch:
speed
каждого автомобиля Car
объекты из класса Cars
Чем вы можете помочь
Я ищу решение, которое позволяет одному классу Cars
содержать каждый объект Car
. Мне не нужны разные коллекции (например, Corvettes
, Clunkers
).Я также ищу решение, которое позволяет создавать объекты Car
на основе атрибутов отдельного типа автомобиля ... как упоминалось ранее, создавая новый Car
своего рода Корвет
даст скорость
0,9
. Не должно быть другого способа указать скорость автомобиля
.
Есть ли лучший способ в этой ситуации? Достаточно ли я прояснил этот пример?
Спасибо.
РЕДАКТИРОВАТЬ: Причина, по которой мне не нужна коллекция абстрактных объектов Car
, заключается в том, что цель коллекции Cars
состоит в создании и управлении Car
предметы, независимо от их вида. Автомобиль
, будучи абстрактным, кажется, усложняет это. Если вы считаете, что это лучшее решение, ответьте соответственно.