Tuỳ theo góc độ mà có các cách phân loại phổ biến sau

1. Phân loại theo số lượng trạng thái

Finite state machine

  • Số trạng thái hữu hạn, đếm được.
  • Khi nói đến state machine trong lập trình, người ta thường ngầm hiểu là Finite state machine.
  • Ví dụ như đèn giao thông, máy ATM, các trạng thái của nhân vật game

Infinite state machine

  • Số trạng thái là vô hạn
  • Ví dụ như: turning machine, counter không giới hạn

2. Phân loại theo cách tính output

Mealy machine

  • Output phụ thuộc vào state hiện tại + input
  • Phản ứng nhanh hơn
// Output thay đổi theo input
state: 'LOCKED',
on: {
  CORRECT_PIN: { target: 'UNLOCKED', actions: 'showSuccess' },
  WRONG_PIN: { target: 'LOCKED', actions: 'showError' }
}

Moore machine

  • Output chỉ phụ thuộc vào state hiện tại
  • Ổn định hơn, dễ thiết kế
// Output cố định theo state
states: {
  RED: { 
    entry: 'turnOnRedLight',  // output của state RED
    after: { 30000: 'GREEN' }
  }
}

3. Phân loại theo tính xác định

Deterministic FSM (DFA - Deterministic Finite Automaton)

  • Từ 1 state + 1 input chỉ có đúng 1 state tiếp theo
states: {
  idle: {
    on: {
      START: 'running'  // chỉ có 1 đích đến
    }
  }
}

Non-deterministic FSM (NFA - Nondeterministic Finite Automaton)

  • Từ 1 state + 1 input → có thể có nhiều state tiếp theo
states: {
  searching: {
    on: {
      FOUND: [
        { target: 'success', cond: 'isValidResult' },
        { target: 'retry', cond: 'needsRetry' },
        { target: 'failed' }  // fallback
      ]
    }
  }
}

4. Phân loại theo cấu trúc

Flat state machine

  • Tất cả states ở cùng 1 cấp
  • Đơn giản nhưng khó mở rộng
states: {
  idle: {},
  loading: {},
  success: {},
  error: {}
}

Hierarchical State Machine (HSM) / Statecharts

  • States cỏ thể lồng nhau
  • Có parent state và child state
  • Phù hợp hệ thống phức tạp
states: {
  authenticated: {
    initial: 'dashboard',
    states: {
      dashboard: {},
      profile: {
        initial: 'viewing',
        states: {
          viewing: {},
          editing: {}
        }
      },
      settings: {}
    }
  },
  unauthenticated: {}
}

Parallel State Machine

  • Có thể ở nhiều state cùng lúc (trong các region khác nhau)
  • Mỗi region độc lập
type: 'parallel',
states: {
  upload: {
    initial: 'idle',
    states: {
      idle: {},
      uploading: {},
      done: {}
    }
  },
  playback: {
    initial: 'stopped',
    states: {
      stopped: {},
      playing: {},
      paused: {}
    }
  }
}
// Có thể vừa uploading vừa playing

5. Phân loại theo khả năng mở rộng

Basic FSM

  • Chỉ có state và transition
  • Không có context, memory

Extended FSM

  • Có thêm context
  • guards điều kiện
  • actions side effect

6. Phân loại theo mục đích sử dụng

Acceptor/Recognizer

  • Nhận input, quyết định chấp nhận hay từ chối
  • Dùng trong: compiler, parser, validation

Transducer

  • Nhận input và tạo output
  • Thường dùng trong protocol handlers, data transformation

Sequence generator

  • Tự động tạo chuỗi output
  • Dùng trong animation, workflow

So sánh

LoạiĐặc điểmKhi nào dùng
FSMHữu hạn stateHầu hết trường hợp
MealyOutput = f(state, input)Cần phản ứng nhanh
MooreOutput = f(state)Cần ổn định
DFADeterministicHành vi cố định
NFANon-deterministicNhiều lựa chọn
Flat1 cấp độĐơn giản
HSMNested statesPhức tạp, nhiều cấp
ParallelNhiều state cùng lúcĐộc lập processes
EFSMCó contextCần lưu dữ liệu