Конечные автоматы¶
Конечный автомат (state machine) — это конечный набор состояний, которые могут детерминированно переходить друг в друга из-за событий.
Конфигурация¶
И конечные автоматы, и диаграммы состояний определяются с помощью фабричной функции createMachine()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Конфигурация машины такая же, как конфигурация узла состояния, с добавлением свойства контекста:
context
— представляет локальное «расширенное состояние» для всех вложенных состояний машины. См. контекст для получения более подробной информации.
Параметры¶
Реализации для действий, активностей, задержек, защитных функций и служб могут быть указаны в конфигурации машины в виде строки, а затем указаны как объект во втором аргументе createMachine()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
У этого объекта есть 5 необязательных свойств:
actions
— сопоставление действий с их реализациейactivities
— сопоставление активностей с их реализациейdelays
— сопоставление задержек с их реализациейguards
— сопоставление охранников переходов с их реализациейservices
— сопоставление служб с их реализацией
Расширение автомата¶
Существующие автоматы могут быть расширены с помощью метода .withConfig()
, который принимает ту же структуру объекта, что и выше:
1 2 3 4 5 6 7 8 9 |
|
Начальный контекст¶
Как показано в первом примере, контекст определяется непосредственно в самой конфигурации. Если вы хотите расширить существующую машину с другим начальным контекстом, вы можете использовать .withContext()
и передать свой context
:
1 2 3 4 5 6 |
|
Внимание
Это не приведет к слиянию с исходным контекстом, а заменит исходный контекст контекстом, предоставленным для .withContext(...)
. Вы все еще можете «объединить» контексты вручную, указав machine.context
:
1 2 3 4 5 |
|