Простой конечный автомат, похожий на Symfony Workflow.
Пример ¶
1o := new(ObjectImplementedPlaceer)
2
3w := NewWorkflow("Start")
4w.AddTransition("Start", "A")
5w.AddTransition("Start", "B")
6w.AddTransition("A", "C")
7w.AddTransition("B", "D")
8w.AddTransition( "C", "D")
9w.AddTransition("C", "Finish")
10w.AddTransition("D", "Finish")
11
12w.Can(o, "A") // == nil
13w.Can(o, "C") // == ErrTransitionNotFound
14
15w.GetEnabledTransitions(o) // []Place{"A", "B"}
16w.Apply(o, "A") // o now at "A" place
17w.GetEnabledTransitions(o) // []Place{"C"}
18
19w.DumpToDot() // See above
Дамп в формат dot ¶
digraph {
Start[color="blue"]
Start -> A[label="Start → A"];
Start -> B[label="Start → B"];
A -> C[label="A → C"];
B -> D[label="B → D"];
C -> D[label="C → D"];
C -> Finish[label="C → Finish"];
D -> Finish[label="D → Finish"];
}
digraph {
Start[color="blue"]
Start -> A[label="Start → A"];
Start -> B[label="Start → B"];
A -> C[label="A → C"];
B -> D[label="B → D"];
C -> D[label="C → D"];
C -> Finish[label="C → Finish"];
D -> Finish[label="D → Finish"];
}