Зависимость базы от конкретных наследников заставляет менять базовый код при каждом расширении и нарушает направление абстракции. Обычно её заменяют виртуальным контрактом или композицией со стратегией.
В чём плох подход, когда базовый класс знает о конкретных наследниках, и чем его можно заменить?
Зависимость базы от конкретных наследников заставляет менять базовый код при каждом расширении и нарушает направление абстракции. Обычно её заменяют виртуальным контрактом или композицией со стратегией.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Зависимость базы от конкретных наследников заставляет менять базовый код при каждом расширении и нарушает направление абстракции. Обычно её заменяют виртуальным контрактом или композицией со стратегией.
Если база выбирает поведение через switch по типу, перенесите различие в переопределяемый метод или интерфейс. Создание конкретных реализаций оставьте фабрике либо composition root.
Базовый класс тогда работает с обещанными возможностями, а не со списком известных потомков. Если иерархия закрыта и операции внешние, возможен Visitor, но это отдельный осознанный компромисс.