<dependency> <groupId>com.github.stateless4j</groupId> <artifactId>stateless4j</artifactId> <version>2.6.0</version> </dependency>
introduktion
Opret statslige maskiner og letvægts tilstand maskinbaserede arbejdsgange direkte i java-kode.
StateMachineConfig<State, Trigger> phoneCallConfig = new StateMachineConfig<>();phoneCallConfig.configure(State.OffHook) .permit(Trigger.CallDialed, State.Ringing);phoneCallConfig.configure(State.Ringing) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.CallConnected, State.Connected);// this example uses Java 8 method references// a Java 7 example is provided in /examplesphoneCallConfig.configure(State.Connected) .onEntry(this::startCallTimer) .onExit(this::stopCallTimer) .permit(Trigger.LeftMessage, State.OffHook) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.PlacedOnHold, State.OnHold);// ...StateMachine<State, Trigger> phoneCall = new StateMachine<>(State.OffHook, phoneCallConfig);phoneCall.fire(Trigger.CallDialed);assertEquals(State.Ringing, phoneCall.getState());
stateless4j er en port af statsløs til java
funktioner
de fleste standard tilstand maskine konstruktioner understøttes:
- generisk støtte til stater og udløsere af enhver java-type (tal, strenge, enums, etc.)
- hierarkiske tilstande
- indgang/udgang begivenheder for stater
- Vagtklausuler til understøttelse af betingede overgange
- brugerdefinerede handlinger kan udføres ved overgang
- interne overgange (ikke opkald)
onExit
/onEntry
) - introspektion
nogle nyttige udvidelser leveres også:
- parameteriserede udløsere
- Reentranttilstande
hierarkiske tilstande
i eksemplet nedenfor er tilstanden OnHold
et understat af tilstanden Connected
. Det betyder, at et OnHold
opkald stadig er tilsluttet.
phoneCall.configure(State.OnHold) .substateOf(State.Connected) .permit(Trigger.TakenOffHold, State.Connected) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.PhoneHurledAgainstWall, State.PhoneDestroyed);
ud over egenskaben StateMachine.getState()
, som vil rapportere den nøjagtige aktuelle tilstand, leveres en isInState(State)
metode. isInState(State)
vil tage understater i betragtning, så hvis eksemplet ovenfor var iOnHold
tilstand, ville isInState(State.Connected)
også evaluere til true
.
indgangs – /Afslutningshændelser
i eksemplet udføres startCallTimer()
– metoden, når et opkald er tilsluttet. stopCallTimer()
vil blive udført, når opkaldet er afsluttet (ved enten at hænge op eller kaste telefonen mod væggen.)
opkaldet kan bevæge sig mellem staterne Connected
og OnHold
uden at metoderne startCallTimer(
) og stopCallTimer()
kaldes gentagne gange, fordi tilstanden OnHold
er et understat i tilstanden Connected
.
indgangs – /Afslutningsbegivenhedshåndterere kan leveres med en parameter af typen Transition
, der beskriver trigger -, kilde-og destinationstilstande.
handling ved overgang
det er muligt at udføre en brugerdefineret handling, når du foretager en overgang.For en’ normal ‘eller’ re-entrant ‘ overgang vil denne handling blive kaldtuden nogen parametre. For ‘dynamiske’ overgange (dem, der beregner måltilstanden baseret på trigger-givne parametre) parametrene forudløseren vil blive givet til handlingen.
denne handling udføres kun, hvis overgangen faktisk er taget; så hvis overgangen er bevogtet, og vagten forbyder en overgang, udføres handlingen ikke.
hvis overgangen er taget, vil handlingen blive udført mellemonExit
handleren i den aktuelle tilstand og onEntry
handleren i Target state (som kan være den samme tilstand i tilfælde af en re-entrantovergang.
Licens
Apache 2.0 Licens
oprettet af @okso42
vedligeholdt af Chris narko