<dependency> <groupId>com.github.stateless4j</groupId> <artifactId>stateless4j</artifactId> <version>2.6.0</version> </dependency>
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