Iterátor
Az Iterátor egy viselkedési tervezési minta. Olyan objektumot jelöl, amely szekvenciális hozzáférést tesz lehetővé egy összesített objektum elemeihez anélkül, hogy az egyes összesített objektumok leírását használná.
![Iterátor](https://cdn.codegym.cc/images/article/87f809f8-e650-4b92-9d29-2624a2b1a64a/800.jpeg)
Például az olyan elemek, mint a fa, egy linkelt lista, egy hash tábla és egy tömb, bejárhatók (és módosíthatók) egy Iterator objektum segítségével.
Az elemeken keresztüli iterációt az iterátor objektum végzi, nem maga a gyűjtemény. Ez leegyszerűsíti a gyűjtemény felületét és megvalósítását, és elősegíti a problémák logikusabb elkülönítését.
A teljesen megvalósított iterátor jellemzője, hogy az iterátort használó kód nem tudhat semmit az iterált aggregátum típusáról.
Ezt a megközelítést nagyon gyakran használják. Például elküld egy SQL-lekérdezést az adatbázisnak, és válaszul egy iterátort ad vissza (SQL-ben általában kurzornak nevezik). A kapott iterátor segítségével pedig sorokat vehetünk ki az SQL válaszból egyenként.
parancs
A parancs egy viselkedési tervezési minta, amelyet az objektumorientált programozásban használnak, és amely egy műveletet reprezentál. A parancsobjektum magát a műveletet és annak paramétereit tartalmazza.
![Parancs](https://cdn.codegym.cc/images/article/d46ddf17-e840-4f4b-a505-092e666ec88f/800.jpeg)
Egy módszer meghívásához általában a következőkre van szüksége:
- objektum hivatkozás
- metódus neve (a módszer hivatkozása)
- módszer paraméterértékei
- hivatkozás a használt objektumokat tartalmazó kontextusra
Mindezeket az adatokat egy objektumba kell csomagolni - Command ( parancs ).
De ez még nem minden: végül is valakinek végre kell hajtania a parancsot. Tehát ez a minta további négy entitást tartalmaz: parancsok ( parancs ), parancsfogadó ( vevő ), parancshívó ( invoker ) és kliens ( kliens ).
Egy tárgyparancstud a vevőről és meghívja a vevő metódusát. A vevő paraméterei a parancsban tárolódnak. A hívó (invoker) tudja, hogyan kell végrehajtani a parancsot, és esetleg nyomon követi a végrehajtott parancsokat. A hívó (invoker) semmit sem tud egy adott parancsról, csak az interfészről tud.
Mindkét objektum (a hívó objektum és több parancsobjektum) a kliens objektumhoz tartozik. A kliens dönti el, hogy mely parancsokat és mikor hajtsa végre. A parancs végrehajtásához átadja a parancs objektumot a hívónak (invoker).
A parancsobjektumok használata megkönnyíti a megosztott összetevők felépítését, amelyeket bármikor delegálhat vagy metódushívásokat kell végrehajtania anélkül, hogy ismernie kellene az osztálymetódusokat vagy a metódusparamétereket.
A hívó objektum (invoker) használata lehetővé teszi a végrehajtott parancsok nyilvántartását anélkül, hogy az ügyfélnek tudnia kellene erről az elszámolási modellről (az ilyen elszámolás hasznos lehet például a visszavonás és újraindítás parancs végrehajtásához).
Például olyan programot ír, amely lehetővé teszi különféle feladatok ütemezett végrehajtását. A programod egyrészt követi a feladatokat és kezeli azok indítását, másrészt több végrehajtója is lehet, amelyek mindegyike saját típusú parancsokat hajthat végre. Például SMS küldés, levélküldés, üzenetküldés a Telegramnak stb.
Megfigyelő
Az Observer egy viselkedési tervezési minta. Olyan osztálymechanizmust valósít meg, amely lehetővé teszi, hogy az osztály objektumai értesítéseket kapjanak más objektumok állapotának változásairól, és így megfigyeljék azokat.
![Megfigyelő](https://cdn.codegym.cc/images/article/4ea53747-311e-48ea-a92c-f622b44ac328/800.jpeg)
Azokat az osztályokat, amelyekre más osztályok előfizetnek, alanyoknak , a feliratkozó osztályokat pedig megfigyelőknek nevezik .
Az Observer minta implementálásakor általában a következő osztályokat használják:
- Megfigyelhető - olyan interfész, amely meghatározza a megfigyelők hozzáadásának, eltávolításának és értesítésének módszereit;
- Megfigyelő - az a felület, amelyen keresztül a megfigyelő megkapja az értesítést;
- A ConcreteObservable egy konkrét osztály, amely megvalósítja az Observable interfészt ;
- A ConcreteObserver egy konkrét osztály, amely megvalósítja az Observer felületet .
Az Observer mintát akkor használják, ha a rendszer:
- van legalább egy objektum, amely üzeneteket küld;
- az üzeneteknek legalább egy címzettje van, és számuk és összetételük változhat az alkalmazás futása közben;
- elkerüli az egymásra ható osztályok erős összekapcsolását.
Ezt a mintát gyakran alkalmazzák olyan helyzetekben, amikor az üzenet küldőjét nem érdekli, mit kezdenek a címzettek a nekik adott információval.
Látogató
A látogató egy viselkedési tervezési minta, amely leír egy műveletet, amelyet más osztályok objektumain hajtanak végre. Látogatás vagy változás esetén nincs szükség a kiszolgált osztályok megváltoztatására.
A sablon bemutatja az elveszett típusú információk visszaállításának klasszikus technikáját anélkül, hogy kétszeres lefelé továbbítást kellene igénybe venni.
![Látogató](https://cdn.codegym.cc/images/article/012e3e42-6151-4ecf-b322-0642841bf923/800.jpeg)
El kell végeznie néhány leválasztott műveletet számos objektumon, de el kell kerülnie a kódjuk szennyezését. És nincs mód vagy vágy arra, hogy lekérdezzük az egyes csomópontok típusát, és a mutatót a megfelelő típusra irányítsuk a kívánt művelet végrehajtása előtt.
A sablont akkor kell használni, ha:
- különböző osztályú objektumok vannak különböző interfészekkel, de rajtuk olyan műveleteket kell végrehajtani, amelyek meghatározott osztályoktól függenek;
- a szerkezeten különféle, a szerkezetet bonyolító műveleteket kell végrehajtani;
- gyakran új műveleteket adnak hozzá a szerkezethez.
közvetítő
A közvetítő egy viselkedési tervezési minta, amely lehetővé teszi több objektum interakcióját, miközben fenntartja a laza csatolást, és elkerüli, hogy az objektumok kifejezetten egymásra utaljanak.
![Közvetítő](https://cdn.codegym.cc/images/article/17d10313-3412-461b-82f2-c007d664adb6/800.jpeg)
A közvetítő minta lehetővé teszi számos objektum interakciójának biztosítását, miközben laza csatolást képez, és kiküszöböli annak szükségességét, hogy az objektumok kifejezetten egymásra utaljanak.
A közvetítő interfészt határoz meg az objektumokkal való információcseréhezKollégák, Egy adott közvetítő koordinálja az objektumok tevékenységétKollégák.
Minden Kolléga osztály ismeri a tárgyátKözvetítő, minden Kolléga csak közvetítővel cserél információt, az ő távollétében közvetlenül kellene információt cserélniük.
Kollégákkéréseket küldhet a Viszonteladónak/span>nak, és kéréseket fogadhat tőle. A közvetítő együttműködő magatartást valósít meg úgy, hogy minden kérést továbbít egy vagy több feléKollégák.