Design Patterns 1 Flashcards
Mi a Command/Action tervezési minta célja?
Egy kérés általában egy függvényhívásként jelenik meg a kódban. Ezzel szemben a Command esetében a kérés objektumként jeleink meg. Ez lehetővé teszi a kliens különböző kérésekkel való felparaméterezését és a kérések sorba állítását, naplózását vagy akár visszavonását is.
Hogyan néz ki a Command minta UML diagramja?
Van egy Command interface Execute függvénnyel. Ezt megvalósítja minimum egy másik osztály. A konkrét utassítás az ő Execute-jában van definiálva, vagy továbbhívja egy receveir osztály függvényét.
Az execute-ot az Invoker adja ki.
Mikor használjuk a Command mintát?
Ha struktúrált programban callback függvényt használnánk, objektumorientáltban használjunk commandot helyette.
Visszavonás támogatására -> Command Processor
Szeretnénk kéréseket különböző időben kiszolgálni a parancs kiadásától, megszületésétől leválasztva. -> várakozási sor, majd akár külön szálakon futtatjuk őket.
Mi a Command minta alapgondolata?
Elválasztja a parancsot kiadó objektumot attól az objektumtól, amelyik tudja hogyan kell lekezelni.
Mi a Command Processor tervezési minta?
A Command minta egy változata. Beépítve támogatja a parancsok visszavonását.
Alapelvek:
UnExecute művelet bevezetése a Command interfészbe: minden command az execute során tagváltozóiban eltárolja azt az állapotot, mely a visszavonáshoz szükséges
CommandProcessor osztály bevezetése:
Eltárolja a már futtatot command objektumok. Rajta keresztül végezzük a parancsok futtatását és visszavonását.
Mi a Command Processor tervezési minta?
A Command minta egy változata. Beépítve támogatja a parancsok visszavonását.
Alapelvek:
UnExecute művelet bevezetése a Command interfészbe: minden command az execute során tagváltozóiban eltárolja azt az állapotot, mely a visszavonáshoz szükséges
CommandProcessor osztály bevezetése:
Eltárolja a már futtatot command objektumok. Rajta keresztül végezzük a parancsok futtatását és visszavonását.
Hogyan néz ki a Command Processor UML diagramja?
Van egy Command interface Execute és UnExecute függvénnyel. Ezt megvalósítja minimum egy másik osztály. A konkrét utassítás az ő Execute-jában van definiálva, vagy továbbhívja egy receveir osztály függvényét. Az Execute és UnExecute függvényhívásokat a CommandProcessor hívja. (ExecuteCommand(cmd: Command), UnExecuteLastCommand()) A Controller-ből hívjuk a CommandProcessor függvényeit.
Mutass egy Command Processor szekvencia diagram példát!
Rajz
Mi a Memento tervezési minta célja?
A Mememento célja az egységbezárás nélkül a külvilág számára elérhetővé tenni az objektum belső állapotát + Command Processor (Un)Execute() [nem kötelező, de célszerű]
Mi a Memento tervezési minta alapgondolata?
A visszavonás gyakran lehetetlen anélkül, hogy a dokumentum teljes állapotát elmentenénk. Gyakran azonban az objektum állapota az egységbezárás miatt nem elérhető. Csak a visszavonás miatt kellene ezeket publikussá tenni, de ne tegyük!
A Memento minta lényege, hogy egy objektum adott állapotát egy Memento objektumba csomagoljuk be.
Memento minta UML?
Van egy Originator. Az ő állapotát kell tudni visszaállítani. CreateMemento() elment, SetMemento() visszaállít
Memento: Az Originator állapotát tárolja és elméletileg csak az Originator számára biztosít hozzáférést az állapothoz.
CareTaker: nyílvántartja a mementót/mementókat.
Memento minta szekvenciadiagram
Rajz
Mikor használjuk a Mementot?
Használjuk, ha egy objektum részállapotát később vissza kell állítani és ennek támogatásához meg kellene sérteni az objektum egységbezárást.
Memento PRO/CON?
PRO: Megőrzi az egységbezárás határait
CON: Memento használata sokszor erőforrásigényes. (pl. teljes dokumentum állapot mentése sok példányban)