stateless4j / stateless4j

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

Bygg Status

Introduksjon

Opprett tilstandsmaskiner og lette tilstandsmaskinbaserte arbeidsflyter 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 av stateless for java

Funksjoner

de fleste standard tilstand maskin konstruksjoner støttes:

  • Generisk støtte for stater og utløsere av hvilken som helst java-type (tall, strenger, enums, etc.)
  • Hierarkiske tilstander
  • Inngangs – /utgangshendelser for tilstander
  • Vaktklausuler som støtter betingede overganger
  • brukerdefinerte handlinger kan utføres ved overgang
  • Interne overganger (ikke kall onExit/onEntry)
  • Introspeksjon

noen nyttige utvidelser er også gitt:

  • Parameteriserte utløsere
  • Reentrante tilstander

Hierarkiske Tilstander

i eksemplet nedenfor er OnHold – tilstanden et substat av Connected – tilstanden. Dette betyr at et OnHold – anrop erfortsatt tilkoblet.

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

i tillegg til egenskapen StateMachine.getState(), som vil rapportere den nøyaktige nåværende tilstanden, er det gitt en isInState(State) – metode. isInState(State) vil ta hensyn til substater, slik at hvis eksemplet ovenfor var i OnHold – staten, vil isInState(State.Connected) også evaluere til true.

Inngangs – / Utgangshendelser

i eksemplet utføres metoden startCallTimer() når et anrop er tilkoblet. stopCallTimer() vil bli utført når samtalen er fullført (ved å enten henge opp eller kaste telefonen mot veggen.)

anropet kan bevege seg mellom Connected og OnHold – statene uten startCallTimer() og stopCallTimer() – metodene som kalles gjentatte ganger fordi OnHold – tilstanden er et substat av Connected – tilstanden.

behandlere for Inn – /utkjøring kan leveres med en parameter av typen Transition som beskriver utløseren,kilden og destinasjonstilstandene.

Handling ved overgang

det er mulig å utføre en brukerdefinert handling når du gjør en overgang.For en’ normal ‘eller’ re-entrant ‘ overgang denne handlingen vil bli kalt uten noen parametere. For ‘dynamiske’ overganger (de som beregner thetarget state basert på trigger-gitte parametere) vil parametrene til thetrigger bli gitt til handlingen.

denne handlingen utføres bare hvis overgangen faktisk er tatt; så hvisovergangen er bevoktet og vakten forbyr en overgang, blir handlingen ikke utført.

hvis overgangen utføres, utføres handlingen mellomonExit – behandleren i gjeldende tilstand og onEntry – behandleren i thetarget-tilstanden (som kan være den samme tilstanden i tilfelle en re-entranttransition.

Lisens

Apache 2.0 Lisens

Laget av @oxo42

Vedlikeholdt av Chris Narkiewicz @ezaquarii

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.