Ответ
Конечный автомат (State Machine) — это математическая модель и паттерн проектирования, описывающий поведение системы, которая может находиться в одном из конечного числа состояний и переходить между ними в ответ на события.
Ключевые компоненты:
- Состояния (States): Определённые конфигурации системы (например,
IDLE,PROCESSING,SUCCESS,ERROR). - Переходы (Transitions): Правила, определяющие, как и при каких событиях система переходит из одного состояния в другое.
- События (Events): Внешние или внутренние триггеры, вызывающие проверку условий для перехода.
- Действия (Actions): Операции, которые могут выполняться при входе в состояние, выходе из него или во время перехода.
Пример (упрощённый загрузчик):
// Определение состояний и переходов
const states = {
IDLE: { on: { FETCH: 'LOADING' } },
LOADING: {
on: {
SUCCESS: 'LOADED',
ERROR: 'FAILED'
}
},
LOADED: {},
FAILED: { on: { RETRY: 'LOADING' } }
};
// Использование
let currentState = 'IDLE';
function transition(event) {
const nextState = states[currentState]?.on?.[event];
if (nextState) {
console.log(`Переход из ${currentState} в ${nextState} по событию ${event}`);
currentState = nextState;
}
}
// IDLE -> FETCH -> LOADING -> SUCCESS -> LOADED
transition('FETCH');
transition('SUCCESS');
Преимущества:
- Ясность: Поведение системы становится явным и легко визуализируемым (диаграммы состояний).
- Надёжность: Исключаются недопустимые переходы и состояния.
- Лёгкость тестирования: Все сценарии можно описать как последовательности состояний и событий.
Применение: UI-компоненты (кнопки, формы), бизнес-процессы (заказ товара), парсеры, сетевые протоколы.