statslös4j / statslös4j

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

Bygg Status

Inledning

skapa statliga maskiner och lätta Statliga maskinbaserade arbetsflöden direkt i java-kod.

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());

statslös4j är en port av statslös för java

funktioner

de flesta standard Statliga maskinkonstruktioner stöds:

  • generiskt stöd för stater och triggers av alla java-typer (siffror, strängar, enums, etc.)
  • hierarkiska tillstånd
  • Entry/exit-händelser för tillstånd
  • Guard-klausuler för att stödja villkorliga övergångar
  • användardefinierade åtgärder kan utföras vid övergång
  • interna övergångar (inte anropar onExit/onEntry)
  • introspektion

några användbara tillägg finns också:

  • parametriserade utlösare
  • Reentranttillstånd

hierarkiska tillstånd

i exemplet nedan är OnHold – tillståndet ett substat av Connected – tillståndet. Det betyder att ett OnHold – samtal fortfarande är anslutet.

phoneCall.configure(State.OnHold) .substateOf(State.Connected) .permit(Trigger.TakenOffHold, State.Connected) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.PhoneHurledAgainstWall, State.PhoneDestroyed);

förutom egenskapen StateMachine.getState(), som rapporterar det exakta nuvarande tillståndet, tillhandahålls en isInState(State) – metod. isInState(State) tar hänsyn till substater, så att om exemplet ovan var iOnHold – tillståndet, skulle isInState(State.Connected) också utvärdera till true.

Entry/Exit-händelser

i exemplet körs metoden startCallTimer() när ett samtal är anslutet. stopCallTimer() kommer att utföras när samtalet är klart (genom att antingen hänga upp eller kasta telefonen mot väggen.)

samtalet kan röra sig mellan Connected och OnHold stater utan startCallTimer() och stopCallTimer()metoder som anropas upprepade gånger eftersom OnHold staten är en substate av Connected tillstånd.

Entry/Exit händelsehanterare kan levereras med en parameter av typen Transition som beskriver utlösnings -, käll-och destinationstillstånd.

åtgärd vid övergång

det är möjligt att utföra en användardefinierad åtgärd när man gör en övergång.För en’ normal ’eller’ re-entrant ’ övergång kommer denna åtgärd att anropas utan några parametrar. För ’dynamiska’ övergångar (de som beräknar thetarget tillstånd baserat på trigger givna parametrar) parametrarna för thetrigger kommer att ges till åtgärden.

denna åtgärd utförs endast om övergången faktiskt tas; så om övergången är bevakad och vakten förbjuder en övergång, då åtgärden inte exekveras.

om övergången görs kommer åtgärden att utföras mellanonExit-hanteraren för det aktuella tillståndet och onEntry – hanteraren för thetarget-tillståndet (vilket kan vara samma tillstånd vid en återinträdesövergång.

Licens

Apache 2.0 licens

skapad av @ oxo42

underhålls av Chris Narkiewicz @ezaquarii

Lämna ett svar

Din e-postadress kommer inte publiceras.