Design Patterns 1 Flashcards

1
Q

Mi a Command/Action tervezési minta célja?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Hogyan néz ki a Command minta UML diagramja?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Mikor használjuk a Command mintát?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Mi a Command minta alapgondolata?

A

Elválasztja a parancsot kiadó objektumot attól az objektumtól, amelyik tudja hogyan kell lekezelni.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Mi a Command Processor tervezési minta?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Mi a Command Processor tervezési minta?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hogyan néz ki a Command Processor UML diagramja?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Mutass egy Command Processor szekvencia diagram példát!

A

Rajz

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Mi a Memento tervezési minta célja?

A

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ű]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Mi a Memento tervezési minta alapgondolata?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Memento minta UML?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Memento minta szekvenciadiagram

A

Rajz

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Mikor használjuk a Mementot?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Memento PRO/CON?

A

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)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly