Mediumnvıdesign
Что такое идиома non-virtual interface (NVI)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
NVI (Non-Virtual Interface) — публичные методы класса невиртуальные, виртуальные — приватные (или protected). Публичный метод вызывает приватный virtual, добавляя pre/post-условия.
class Algorithm {
public:
void run() { // невиртуальный — оркестрация
preCheck();
doRun(); // виртуальный — конкретная логика
postCheck();
}
private:
virtual void doRun() = 0; // переопределяют наследники
void preCheck();
void postCheck();
};Преимущества: (1) invariant enforcement — базовый класс гарантирует pre/post-checks всегда выполняются; (2) наследники не могут пропустить проверки; (3) гибкость — можно менять оркестрацию без изменения интерфейса; (4) лучше документация.
Альтернатива — Template Method pattern. STL практически не использует NVI, но в крупных фреймворках распространена.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.