<dependency> <groupId>com.github.stateless4j</groupId> <artifactId>stateless4j</artifactId> <version>2.6.0</version> </dependency>
Johdanto
luo valtiokoneita ja kevyitä valtiokonepohjaisia työnkulkuja suoraan java-koodiin.
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 on Javan stateless-portti
ominaisuudet
useimmat tavalliset valtionkoneistot ovat tuettuja:
- yleinen tuki minkä tahansa java-tyypin (numerot, merkkijonot, enumit jne.)
- hierarkkiset valtiot
- sisään – / uloskäyntitapahtumat valtioille
- ehdollisia siirtymiä tukevat Suojauslausekkeet
- Käyttäjän määrittämät toimet voidaan suorittaa, kun transitio
- sisäiset transitiot (ei kutsu
onExit
/onEntry
) - itsetutkiskelu
on myös joitakin hyödyllisiä laajennuksia:
- Parametrisoidut laukaisijat
- Reentrant states
hierarkkiset valtiot
alla olevassa esimerkissä OnHold
tila on Connected
valtion ala-asema. Tämä tarkoittaa, että OnHold
puhelu on edelleen kytketty.
phoneCall.configure(State.OnHold) .substateOf(State.Connected) .permit(Trigger.TakenOffHold, State.Connected) .permit(Trigger.HungUp, State.OffHook) .permit(Trigger.PhoneHurledAgainstWall, State.PhoneDestroyed);
StateMachine.getState()
– ominaisuuden lisäksi, joka kertoo tarkan nykytilan, on esitetty isInState(State)
– menetelmä. isInState(State)
huomioi ala-asemat siten, että jos yllä oleva esimerkki olisiOnHold
tilassa, isInState(State.Connected)
arvioisi myös true
.
Entry/Exit Events
esimerkissä startCallTimer()
– menetelmä suoritetaan, kun puhelu yhdistetään. stopCallTimer()
soitetaan puhelun päätyttyä (joko ripustamalla tai heittämällä puhelin seinää vasten.)
kutsu voi liikkua Connected
ja OnHold
valtioiden välillä ilman, että startCallTimer(
) ja stopCallTimer()
menetelmiä kutsutaan toistuvasti, koska OnHold
tila on Connected
valtion aliasema.
saapumis – / Poistumistapahtumien käsittelijöille voidaan toimittaa tyyppi Transition
– parametri,joka kuvaa laukaisu -, lähde-ja kohdetiloja.
Action on transition
on mahdollista suorittaa käyttäjän määrittelemä toiminto siirtymää tehtäessä.”Tavanomaisessa” tai ”uuteen liittymiseen” liittyvässä siirtymävaiheessa tätä toimea kutsutaan ilman parametreja. ”Dynaamisissa” siirtymissä (ne, jotka laskevat tavoitetilan liipaisinmuuttujien perusteella) toimelle annetaan käynnistimen parametrit.
tämä toimenpide toteutetaan vain, jos siirtyminen on todella toteutettu; joten jos siirtymä on vartioitu ja vartija kieltää siirtymisen, niin toimenpidettä ei suoriteta.
jos Siirtymä toteutetaan, toimi toteutetaan nykyisen valtiononExit
käsittelijän ja kohdevaltion onEntry
käsittelijän välillä (joka voi olla sama valtio, jos liittyminen tapahtuu uudelleen.
Lisenssi
Apache 2.0 License
Created by @oxo42
Maintained by Chris Narkiewicz @ezaquarii