Реализация паттерна Abstract Factory для создания фигур

Для расширения без изменения фабрики используйте реестр Supplier<Shape>. Новый Pentagon подключается регистрацией поставщика; сам факт появления класса не делает его автоматически обнаружимым.

Короткий ответ

Что ответить на собеседовании

Для расширения без изменения фабрики используйте реестр Supplier<Shape>. Новый Pentagon подключается регистрацией поставщика; сам факт появления класса не делает его автоматически обнаружимым.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать паттерн проектирования Abstract Factory, позволяющий получать объекты, реализующие интерфейс Shape. Метод getInstance() должен возвращать экземпляр требуемой фигуры. При этом решение должно быть спроектировано так, чтобы легко добавлять новые типы фигур без изменения существующего кода. Например, после добавления класса Pentagon, реализующего Shape, фабрика должна без доработок уметь создавать его экземпляры. В текущем проекте уже присутствуют реализации фигур Cube и Triangle.

public class ShapeFactory {

}

Ответ

Для расширения без изменения фабрики используйте реестр Supplier<Shape>. Новый Pentagon подключается регистрацией поставщика; сам факт появления класса не делает его автоматически обнаружимым.

public class ShapeFactory {
    private final Map<String, java.util.function.Supplier<Shape>> creators;
    public ShapeFactory(Map<String, java.util.function.Supplier<Shape>> creators) {
        this.creators = Map.copyOf(creators);
    }
    public Shape getInstance(String type) {
        var creator = creators.get(type);
        if (creator == null) throw new IllegalArgumentException("Unknown shape");
        return creator.get();
    }
}

Конфигурация: Map.of("cube", Cube::new, "triangle", Triangle::new); новая фигура добавляется там или через ServiceLoader/DI. Это registry factory, не классическая Abstract Factory семейств связанных продуктов. Без параметра, конфигурации или отдельной фабрики getInstance не может знать требуемый тип фигуры.

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

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

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

Подробнее