Это был вопрос интервью, который должен быть закодирован в С++:
Введите код для торгового автомата: Начните с простого, когда он просто переносит один тип элемента. Таким образом, две переменные состояния: деньги и инвентарь.
Мой ответ:
Я бы использовал машину состояний, которая имеет около 3-4 состояний. Используйте переменную enum для указания состояния и использования оператора case switch, где каждый случай выполняет операции, соответствующие каждому состоянию, и остается в цикле для перехода из одного состояния в другое.
Следующий вопрос:
Но использование оператора case switch не "хорошо масштабируется" для добавления большего количества состояний и изменения существующих операций в состоянии. Как вы собираетесь справиться с этой проблемой?
Я не мог ответить на этот вопрос в то время. Но позже я подумал, что могу:
- имеют разные функции для разных состояний (каждая функция, соответствующая состоянию)
- имеют
std::map
from (string, function), где строка указывает состояние на вызов соответствующей функции состояния. - Основная функция имеет строковую переменную (начиная с начального состояния) и вызывает функцию, соответствующую этой переменной в цикле. Каждая функция выполняет операции и возвращает новое состояние в основную функцию.
Мои вопросы:
- В чем проблема с операторами switch-case в отношении масштабируемости в контексте крупномасштабных программных систем?
- Если это мое решение (которое в настоящее время я чувствую, немного более модульное, чем длинный линейный код), чтобы решить проблему?
Вопрос интервью ожидает ответов от идиом С++ и шаблонов проектирования для крупномасштабных программных систем.