statsløse 4J / statsløse 4J

 <dependency> <groupId>com.github.stateless4j</groupId> <artifactId>stateless4j</artifactId> <version>2.6.0</version> </dependency>

Byg Status

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.