State pattern cho phép object đổi hành vi khi state nội tại đổi — nhìn từ ngoài như thể object đổi class.
Thay vì rải if (state === 'idle') ... else if (state === 'loading') ... khắp codebase, mỗi state là một class mang hành vi riêng.
ts
interface TrafficLightState {
next(light: TrafficLight): void
getColor(): string
}TrafficLight có RedState, GreenState, YellowState — mỗi state implement interface trên.
State pattern và FSM (Finite State Machine) rất gần nhau: FSM là khái niệm toán học (state, transition, input), còn State pattern là cách hiện thực FSM theo hướng OOP. Thư viện XState cho JavaScript hiện thực FSM/Statechart theo kiểu declarative, hợp hơn State pattern thuần khi luồng phức tạp.
- Dùng khi: hành vi của object phụ thuộc rõ vào state, và các transition đủ phức tạp để cần dễ bảo trì.
- Không dùng khi: chỉ có 2-3 state đơn giản — enum + switch/case dễ đọc hơn.