Основная проблема в том, что класс Property не поддерживает полиморфизм. В текущей реализации все объекты Property имеют одинаковую структуру и поведение, что ограничивает расширяемость и гибкость.
Полиморфизм Property в расчёте стоимости недвижимости
Основная проблема в том, что класс Property не поддерживает полиморфизм. В текущей реализации все объекты Property имеют одинаковую структуру и поведение, что ограничивает расширяемость и гибкость.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В чём основная проблема выбранной структуры решения
Класс Property не поддерживает полиморфизм
Поля класса могут быть неинициализированы
Метод переноса расчета общей стоимости в классе «Заказ»
Не использует механизмы транзакционности
Нет исключений при пустом спискеpublic class RealEstateService { private ListingRepository listingRepository;
public RealEstateService(ListingRepository listingRepository) {
this.listingRepository = listingRepository;
}
public double calculateTotalCost() {
List<Property> properties = listingRepository.getAllListings();
double total = 0;
for (Property property : properties) {
total += property.getPrice();
}
return total;
}
}
class ListingRepository { public List<Property> getAllListings() { return Arrays.asList(new Property(250000), new Property(150000)); } }
class Property { private double price;
public Property(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
}
Ответ
Основная проблема в том, что класс Property не поддерживает полиморфизм. В текущей реализации все объекты Property имеют одинаковую структуру и поведение, что ограничивает расширяемость и гибкость.
Если в будущем появятся разные типы недвижимости с разными способами расчёта цены или дополнительными свойствами, текущая структура не позволит это удобно реализовать.
Для улучшения стоит сделать Property абстрактным классом или интерфейсом, а конкретные типы недвижимости реализовать как подклассы. Тогда метод getPrice() можно переопределять для разных типов.
Пример:
abstract class Property {
public abstract double getPrice();
}
class Apartment extends Property {
private double basePrice;
private double maintenanceFee;
public Apartment(double basePrice, double maintenanceFee) {
this.basePrice = basePrice;
this.maintenanceFee = maintenanceFee;
}
@Override
public double getPrice() {
return basePrice + maintenanceFee;
}
}
class House extends Property {
private double price;
public House(double price) {
this.price = price;
}
@Override
public double getPrice() {
return price;
}
}
Это позволит расширять модель без изменения существующего кода и использовать полиморфизм для расчёта стоимости.