hontalan4j / hontalan4j

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

Build Status

Bevezetés

hozzon létre állapotgépeket és könnyű állapotgép-alapú munkafolyamatokat közvetlenül java kódban.

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 egy port hontalan java

jellemzők

a legtöbb szabványos állami gép konstrukciók támogatottak:

  • Általános támogatás bármely java típusú állapothoz és triggerhez (számok, karakterláncok, enumok stb.)
  • hierarchikus állapotok
  • belépési / kilépési események
  • Guard záradékok a feltételes átmenetek támogatására
  • a felhasználó által definiált műveletek végrehajthatók az
  • belső átmenetek átállításakor (nem hív onExit/onEntry)
  • Introspection

néhány hasznos bővítmények is rendelkezésre állnak:

  • paraméterezett triggerek
  • Reentráns állapotok

hierarchikus állapotok

az alábbi példában a OnHold állapot a Connected állapot alállomása. Ez azt jelenti, hogy egy OnHold hívás még mindig csatlakozik.

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

a StateMachine.getState() tulajdonság mellett, amely a pontos aktuális állapotot jelenti, egy isInState(State) módszer is rendelkezésre áll. A isInState(State) figyelembe veszi az alállomásokat, így ha a fenti példaOnHold állapotban volt, akkor a isInState(State.Connected)is true – re értékelné.

belépési/kilépési események

a példában a startCallTimer() metódus kerül végrehajtásra, amikor egy hívás csatlakozik. A stopCallTimer() akkor kerül végrehajtásra, amikor a hívás befejeződik (a telefon felakasztásával vagy a falhoz dobásával.)

a hívás mozoghat a Connected és OnHold állapotok között anélkül, hogy a startCallTimer() és a stopCallTimer() metódusokat ismételten meghívnák, mert a OnHold állapot a Connected állapot alállomása.

a belépési/kilépési eseménykezelők egy Transition típusú paramétert kaphatnak,amely leírja a kiváltó, a forrás és a célállapotokat.

művelet az átmenet során

lehetséges egy felhasználó által definiált művelet végrehajtása az átmenet során.Egy ‘normál ‘ vagy’ újra belépő ‘ átmenet esetén ez a művelet paraméter nélkül lesz meghívva. A ‘dinamikus’ átmeneteknél (azok, akik a célállapotot a trigger által megadott paraméterek alapján számítják ki) a trigger paraméterei lesznek megadva a műveletnek.

ez a művelet csak akkor kerül végrehajtásra, ha az átmenetet ténylegesen végrehajtják; tehát ha az átmenetet őrzik, és az őr tiltja az átmenetet, akkor a művelet nem kerül végrehajtásra.

ha az átmenet megtörténik, a művelet az aktuális állapotonExit kezelője és a célállapot onEntry kezelője között kerül végrehajtásra (amely lehet ugyanaz az állapot újbóli belépéskor.

Licenc

Apache 2.0 licenc

készítette: @ oxo42

karbantartó: Chris Narkiewicz @ezaquarii

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.