Design Patterns 2 Flashcards
Mi a template method célja?
Egy műveleten belül algoritmus vázat definiál és az algoritmus bizonyos lépéseinek implementálását a leszármazott osztályra bízza.
Mik a Template Method következményei?
Lehetővé teszi, hogy az algoritmus/folyamat invariáns részeit egy helyen definiáljuk és a változó részeket a leszármazott osztályban adjuk meg.
Megoldható a kódduplikálás elkerülése (DRY-elv): a hierarchiában a közös kódrészeket a szülő osztályban egy helyen adjuk meg.
Template Method UML?
Absztrakt ősosztály virtuális függvényekkel, amiket egy leszármazott valósít meg.
Template method PRO/CON?
PRO: Új viselkedés könnyen bevezethető, nem kell a meglévő kódot lényegi helyen változtatni.
CON: Futás közben nem tudjuk egyszerűen cserélni a viselkedést, rugalmatlan. (A származtatási hierarchia fordításkor eldől.)
Sok keresztkombinációra lehet szükség. -> robbanás
Mi a Strategy minta célja?
Célja az algoritmusok/viselkedések egy csoportján belül az egyes algoritmusok/viselkedések egységbe zárása és egymással kicserélhetővé tétele. (A kliens szemszögéből az általa használt algoritmusok/viselkedések szabadon kicserélhetők.)
Strategy minta UML?
Context osztálynak referenciája van egy Strategy interface-t megvalósító osztály példányra. A Strategy-t konkrtét osztályok valósítják meg.
Az osztály viselkedésének minden olyan aspektusára/diemnziójára melyet lecserélhetővé/bővíthetővé szeretnénk tenni, külön strategy hierarchiát vezetünk be.
Strategy PRO/CON?
PRO: Új viselkedés könnyen bevezethető, nem kell a meglévő kódot (lényegi helyen) változtatni. Több aspektus/dimenzió esetén nincs kombinatorikus robbanás az osztályhierarchiában.
Unit tesztelhetőség segíti. Hogyan? “Dummy” implementációkat tudunk neki átadni.
Mi az UNIT teszt?
Unit tesztek során az osztályt önmagában a függőségi nélkül teszteljük.
Melyik jellegzetes elvnek a megtestesülése a Strategy?
Program to an interface (and not to an impementation)
Mi a Singleton célja?
Biztosítja, hogy egy osztályból csak egy példányt lehessen létrehozni és ehhez az egy példányhoz globális hozzáférést biztosít.
Singleton és UNIT tesztelhetőség?
Sok esetben nem javasolt a Singleton használata, mert mindig az osztály típusával tér vissza, nem tudunk egy alternatív “dummy” implementációval visszatérni, ami pedig a unit tesztelésnél sokszor alapelvárás.
Mi az Abstract Factory minta célja?
Interfészt biztosít ahhoz, hogy egymással összefüggő objektumok családjait hozzuk létre anélkül, hogy specifikálnánk a konkrét osztályaikat. Így az objektumok létrehozása egy interfészen keresztül történik, a kódunk nem fog függeni a létrehozott objektumok konkrét osztályától/típusátol.
Abstract Factory UML?
AbstractFactory Interface. Egy Client osztály mely rendlelkezik egy AbstracFactory referenciával. Van legalább egy Product interface és azt megvalósító osztály. Ilyen példányokat hoznak létre az AbstractFactory-t megvalósító osztályok.
Mikor használjuk az Abstract factory-t?
Akkor használjuk, amikor a rendszernek függetlennek kell lennie az általa létrehozott dolgoktól (pl. felhasználói felület elemek)
A rendszernek több termékcsaláddal kell együttműködnie.
A rendszernek szorosan összetartozó “termék” objektumok adott családjával kell dolgozni és ezt akarjuk kényszeríteni a rendszerben.
Abstract factory PRO/CON?
PRO:
Elszigeteli a konkrtét osztályokat
A termékcsaládokat könnyű kicserélni
Elősegíti a termékek közötti konzisztenciát