Zdarzenie na podstawie innych zdarzeń

0

Cześć.
Mam pytanie na temat teoretycznego sposobu rozwiązania problemu.
Piszę sobie prostą gierkę 2d w javie (ot tak żeby się pouczyć).
W jaki sposób rozwiązać problem w którym odwołanie się do konkretnej metody zależy od innych rzeczy? Np. Metoda "zrobKrokDoPrzodu" może być wywołana tylko wtedy kiedy postać: "stoi na nogach", "nie ma złamanej nogi" i np. "nie ma bagażu".
Okej, można zrobić 3 metody zwracające boolean i robić if if if ale to moim zdaniem bezsensu. Ostatnio znalazłem wzorzec projektowy "Stan" który dość dobrze takie drzewko ifów likwiduje... A co w sytuacji jeśli "IFy" następują po sobie np. sprawdzenie czy postać stoi na nogach może byc wykonane po sprawdzeniu czy nie śpi a stan czy śpi tylko wtedy kiedy wcześniej było wiadomo że np jest noc. Wówczas tworzy się takie cudo:

if(czyNoc){
    if(!czySpi){
        if(czyStoi){
        }
    }
}

Już nie mówiąc że mogą też wystąpić jakieś else.

Jak coś takiego skutecznie niwelować?

Pozdrawiam,
~eL

0

Ja bym po prostu takie warunki implementował jako Predykaty zwracające booleany a taką kaskadę załatwiał po prostu listą predykatów. Potem po prostu iterujesz sobie po tej liście i ewaluujesz każdy predykat i sprawdzasz czy wszystkie były prawdziwe. Z javą 8 to będzie zwykłe reduce na strumieniu predykatów ;)

0

I naprawdę nie ma nic bardziej sensownego? W przypadku kilku warunków to okej, nie będzie to duża struktura. Ale jeśli metoda "A" ma się wywołać po przejściu przez kilka innych metod w innych przypadku może wywołać też "B", "C" czy nawet "D" to robi się to strasznie upierdliwe. Już nie mówiąc o tym że edycja (a bo np przypomniało się że jednak jeszcze 2-3 inne czynniki trzeba sprawdzić gdzieś w środku) jest mega utrudniona.

2

Tu jest całkiem ciekawy artykuł na temat zamiany takich warunków w strategie: www.informit.com

Istnieje jeszcze coś takiego jak Rule Engine, np Drools (takie rozwiązanie jest wybierane w większych projektach)

1 użytkowników online, w tym zalogowanych: 0, gości: 1