CodeGym/Java tanfolyam//Viselkedési minták, 2. rész

Viselkedési minták, 2. rész

Szint, Lecke
Elérhető

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.

Állapot

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.

Stratégia

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

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.

Felelősségi lánc

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.

Guardian (Memento)

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.
1
Feladat
szintlecke
Zárt
USB MP3 Player
task4118
1
Feladat
szintlecke
Zárt
Strategic shopping
task4119
1
Feladat
szintlecke
Zárt
Game of Life
task4120
1
Feladat
szintlecke
Zárt
Technical Support
task4121
1
Feladat
szintlecke
Zárt
Memento mori
task4122
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései