Полиморфизм 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;
    }
}

Это позволит расширять модель без изменения существующего кода и использовать полиморфизм для расчёта стоимости.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее