Конечный автомат — это математическая модель расчета, которая представляет конечные состояния и поведение, такое как переходы и действия между этими состояниями.Он широко используется в моделировании поведения приложений, проектировании систем аппаратных схем, разработке программного обеспечения, компиляторах и сетях.Протоколы и изучение вычислительной техники и языка.
Появление конечных автоматов заключается в моделировании изменений состояния сложных объектов и обработке их инженерным способом, удобным для понимания и коммуникации.
Введение в конечный автомат
В реальной разработке часто возникают проблемы с конечными автоматами. В качестве простого примера рассмотрим статус заказа, размещенного в пользовательском платежном сценарии, статус заказа может претерпевать такие изменения: в ожидании платежа --> в обработке --> сбой/успешно В этом процессе бизнес-система должна запросить статус заказа у сторонней платежной системы (WeChat, Alipay) и обновить статус заказа в локальной библиотеке.
Подобных сценариев много, особенно когда много состояний объектов, поддерживать становится все труднее, в то же время возникают и проблемы параллелизма, и если не быть внимательным, возникнут ошибки. Так что необходимо спроектировать управляющую машину общего состояния.
Дизайн конечного автомата
Хороший дизайн конечного автомата, во-первых, обладает хорошей универсальностью и может адаптироваться ко многим сценариям, а во-вторых, он дружелюбен к разработчикам и не требует от разработчиков заботы о внутренней реализации.
Из определения конечного автомата видно, что конечный автомат состоит из переходов состояний.Каждый переход состояний включает предварительное состояние, поведенческую операцию и пост-состояние.Обычно изменение состояния сопровождается уведомлением о событии.
Реализация конечного автомата
Реализация конечного автомата не сложная, он состоит из следующих классов
- StateManager : менеджер состояний, реализующий основную логику конечного автомата, сам по себе является абстрактным классом, который поддерживает набор автоматических переходов состояний (не конечное состояние --> конечное состояние) и набор слушателей изменения состояния.
- StateTransition : переход состояния, который определяет предварительное состояние (preState), поведенческую операцию (операцию) и пост-состояние (возвращаемое значение операции).
- StateListener : слушатель изменения состояния
- StateAutoSync: автоматический синхронизатор состояния, который регистрирует все менеджеры состояний внутри, отвечает за поиск соответствующего диспетчера состояний и синхронизацию состояния.
Существует два основных типа реализации подкласса StateManager: LocalStateManager (состояние обслуживания памяти) и GlobalStateManager (состояние обслуживания глобального хранилища, например mysql/redis).
Асинхронное управление событиями
Добавьте управление событиями, поддержите асинхронный (параллелизм пула потоков) и синхронный два режима.
Весь процесс обработки примерно таков: запрос на обработку поступает в систему как событие, а асинхронный диспетчер (AsyncDispatcher) отвечает за вызов соответствующего диспетчера событий (Event Handler). После того, как планировщик событий завершит обработку, может быть сгенерировано новое событие и передано планировщику для распространения, или сам планировщик может быть конечным автоматом, который внутри обрабатывает переход состояний.
Конкретные коды см.GitHub.com/vector jin/S…