2.1 Állapot
Az állapot egy viselkedési tervezési minta. Olyan esetekben használják, amikor a program végrehajtása során az objektumnak állapotától függően meg kell változtatnia viselkedését.
A minta 3 blokkból áll:
A kontextus egy olyan osztály, amelynek objektumainak az állapottól függően meg kell változtatniuk viselkedésüket.
Az állapot az az interfész, amelyet a konkrét állapotok mindegyikének megvalósítania kell. Ezen a felületen keresztül a Context objektum kölcsönhatásba lép az állapottal azáltal, hogy metódushívásokat delegál rá. Az interfésznek tartalmaznia kell a visszacsatolás eszközeit a megváltoztatandó objektumhoz.
Ehhez egy eseményt használnak (minta Kiadó - Előfizető). Erre azért van szükség, hogy a program végrehajtása során események bekövetkezésekor lecseréljük az állapotobjektumot. Előfordulhatnak olyan esetek, amikor maga a kontextus időnként lekérdezi az állapotobjektumot az átmenethez.
ConcreteState1, ConcreteState2 - a konkrét állapotok osztályai. Információkat kell tartalmaznia arról, hogy az objektum milyen feltételek mellett és milyen állapotban léphet át az aktuális állapotból. Például a ConcreteState1-ből egy objektum mehet a ConcreteState2-be és ConcreteState3-ba, a ConcreteState2-ből pedig vissza a ConcreteState1-be, és így tovább. Az egyik objektumának tartalmaznia kell a Kontextust a létrehozáskor.
Például egy játékot ír, amelyben egy karakter futhat, úszhat és repülhet. Ha a karaktered a vízbe került, akkor ésszerű korlátozni a viselkedését a vízben: most nem tud lőni, de van néhány cselekvése: úszni előre, jobbra, balra stb.
A karaktered állapota leírható egy State objektummal, amelynek vannak meghívható metódusai, amelyek tesznek valamit. És miután a karaktered a vízbe került, csak megváltoztatod a hivatkozást egy másik Állapot objektumra a belsejében – és az megváltoztatja az állapotát.
2.2 stratégia
A stratégia egy viselkedési tervezési minta az algoritmusok családjának meghatározásához, mindegyik beágyazásához és felcserélhetővé tételéhez. Ez lehetővé teszi az algoritmus kiválasztását a megfelelő osztály meghatározásával.
A stratégia minta lehetővé teszi a kiválasztott algoritmus megváltoztatását, függetlenül az azt használó ügyfélobjektumoktól.
A stratégia minta lehetővé teszi a kontextustól függően különböző üzleti szabályok vagy algoritmusok használatát. Olyan esetekben használatos, amikor a rendszer (vagy környezete) aktuális állapotától függően ugyanazon a helyen különböző algoritmusokat kell használni.
Erősségek:
- különböző algoritmusok megvalósításának beágyazása, a rendszer függetlenné válik az üzleti szabályok esetleges változásaitól;
- az összes algoritmus egyetlen szabványos módon történő meghívása;
- nem használ kapcsolókat és/vagy feltételes utasításokat.
Ez a minta némileg hasonlít az állammintára, de itt nem az állapoton van a hangsúly, hanem a viselkedésen. Tegyük fel, hogy egy karakter a játékodban fegyvert cserélhet. Ezután fegyverváltáskor egyszerűen megváltoztathatja a fegyver működését leíró objektum hivatkozását.
2.3 Sablon módszer
Absztrakt osztály (absztrakt osztály) - meghatározza az absztrakt műveleteket, amelyeket az örökösökben helyettesítenek az algoritmus lépéseinek végrehajtása érdekében; sablon módszert valósít meg, amely meghatározza az algoritmus vázát. A template metódus meghívja a helyettesített és az Abstract osztályban meghatározott egyéb műveleteket.
Konkrét osztály (concrete class) - a helyettesített műveleteket a megvalósításhoz szükséges módon valósítja meg. A Concrete osztály feltételezi, hogy az algoritmus invariáns lépései az AbstractClass-ban lesznek végrehajtva.
Ezt a mintát gyakran használják, ha szükséges:
- Az algoritmus invariáns részének egyszeri használata, a változó részt az örökösök belátására hagyva.
- A több osztályban közös kód lokalizálása és elkülönítése a párhuzamosságok elkerülése érdekében.
- Csak bizonyos helyeken engedélyezze az örökösök számára a kód kiterjesztését.
Igen, ez a minta egy pár használatát írja le: egy absztrakt osztályt és annak megvalósítását.
2.4 Felelősségi lánc
A felelősségi lánc egy viselkedési tervezési minta, amelyet a felelősségi szint megszervezésére terveztek egy rendszerben.
A sablon használata olyan körülmények között javasolt, ahol:
- a kifejlesztett rendszerben van egy objektumcsoport, amely képes feldolgozni egy bizonyos típusú üzenetet;
- minden üzenetet legalább egy rendszerobjektumnak fel kell dolgoznia;
- A rendszerben lévő üzenetek feldolgozása a „dolgozd fel magad vagy továbbítsd másnak” séma szerint történik, vagyis egyes üzenetek feldolgozása azon a szinten történik, ahol érkezett, míg másokat más szintű objektumokhoz továbbítanak.
2.5 Mementó
A Keeper (Memento) egy viselkedési tervezési minta, amely lehetővé teszi egy objektum belső állapotának rögzítését és mentését a tokozás megsértése nélkül, hogy később vissza lehessen állítani ebbe az állapotba.
A Guardian mintát akkor használják, ha:
- el kell menteni egy pillanatképet az objektum (vagy annak egy részének) állapotáról a későbbi helyreállításhoz;
- Az objektumok állapotának lekérdezéséhez szolgáló közvetlen interfész felfedi a megvalósítás részleteit, és megszakítja az objektum tokozását.