Update:Паттерн состояние и охрана
Паттерн состояние может неправильный способ решить эту проблему. Следовательно, любой другой шаблон приветствуется. В основном, я ищу способ иметь охранные условия для каждого состояния, но с чистым и поддерживаемым кодом. Как бы интерфейсные системы маршрутизации на стороне, такие как emberjs, ui-router и реагирующий маршрутизатор, реализовали guard conditions
, чтобы избежать ввода определенного состояния, если условие не выполняется?
Я хочу реализовать конечный автомат, используя шаблон состояния, но я не могу обернуть вокруг него голову. Короче говоря:
If error -> error state
If A && B && C -> second state
If only A -> first state
В любом состоянии, при ошибке, переходим к состоянию ошибки. входы (события) A, B и C могут поступать в любом порядке, но если все они пройдут, мы перейдем во второе состояние. Если применяется только вход A, мы переходим в 1-ое состояние.
Следующая диаграмма состояния взята из книги о языках конкретных языков Мартина Фаулера.
В описании он говорит:
мисс Грант, имеет секретное отделение в своей спальне , что, как правило, блокируется и скрытое. Чтобы открыть его, она должна закрыть дверь, затем открыть второй ящик в груди и повернуть ее прикроватная лампа на в любом порядке. Как только это будет сделано, секретная панель откроется для ее открытия.
Я подчеркиваю, что turning light
и opening 2nd drawer
может произойти в любом порядке . То же, что A, B и C.
на основе @SQLPolice комментарии и книги, я нарисовал это:
Но проблема в том, я мог бы иметь (A & & B & & C & & D & & D & & E). В этом случае это будет громоздко, чтобы иметь все промежуточные состояния комбинации.
У вас есть начальное состояние, я предполагаю? –
Что вы рисуете это в ... UML/Flow ...? –
@DavidBarker, нет. Мне просто нужно что-то визуальное, чтобы понять, как реализовать. – norbertpy