Ответ зависит от того, кто выполняет действие. Если Sedan
добавляют себя в грузовик, то у вас должен быть метод addTruck
, который добавляет все грузовики в менеджера. Менеджер будет хранить Truck
s в Map
.
private Map<String, Truck> trucks = new HashMap<String, Truck>();
public void registerTruck(Truck truck) {
trucks.put(truck.getId(), truck);
}
Тогда метод addCar()
на менеджере сделает:
public void addCar(String truckId, CarEntity car) {
Truck truck = trucks.get(truckId);
// null handling needed here
truck.addCar(car);
}
Если вместо этого грузовики забирают машины, вы можете зарегистрировать их. Если вам нужно, чтобы оба были по строковому идентификатору, вам нужно зарегистрировать как легковые, так и грузовые автомобили и сделать что-то вроде:
private Map<String, Truck> trucks = new HashMap<String, Truck>();
private Map<String, Sedan> sedans = new HashMap<String, Sedan>();
public void registerTruck(Truck truck) {
trucks.put(truck.getId(), truck);
}
public void registerSedan(Sedan sedan) {
sedans.put(sedan.getId(), sedan);
}
public void addSedan(String sedanId, String truckId) {
Sedan sedan = sedans.get(sedanId);
Truck truck = trucks.get(truckId);
// null handling needed here
truck.addCar(sedan);
}
Обычно мы используем интерфейсы Java для выполнения развязки. Класс Truck
должен иметь возможность добавлять CarEntity
к своей загрузке, не зная, что это Sedan
. В этом случае метод addCar(CarEntity car)
на Truck
звучит нормально. Sedan
никогда не узнает, что это на Truck
, и все, что знает грузовик, это методы, предоставляемые через интерфейс CarEntity
. В этом случае, возможно, менеджер уходит.