
Návrhový vzor Command zapouzdřuje operaci a její parametry do objektu tak, aby šla kdykoliv později zavolat. Potřebné informace většinou zahrnují typ operace, názvy parametrů a jejich hodnoty.
Uživatel nejprve vytvoří instance příkazů, které chce provést. K dispozici má i výkonný objekt, kterému příkazy předá. Výkonný objekt vykoná režii kolem spuštění (například uložení do historie) a příkazy spustí. Každý příkaz potom vykoná svou práci na svém podřízeném objektu.
Příklady použití:
- definice akcí pro tlačítka GUI (v jazyce JAVA je to rozhraní Action)
- nahrávání makra (posloupnosti příkazů lze načítat a ukládat)
- historie operací s možností Undo / Redo
- vícevláknové zpracovávání (operace se ukládají do fronty a na pozadí je zpracovávají vlákna)
- transakční zpracování (operace se nashromáždí a na požádání atomicky spustí)
Implementace v jazyce Scala#edit
trait Operace {
def spustit()
}
class Vypinac {
private var historie: List[Operace] = Nil
def provest(cmd: Operace) {
cmd.spustit()
this.historie :+= cmd
}
}
class Zarovka {
def zapnout() = println("Sviti")
def vypnout() = println("Nesviti")
}
class ZapnoutZarovku(zarovka: Zarovka) extends Operace {
def spustit() = zarovka.zapnout()
}
class VypnoutZarovku(zarovka: Zarovka) extends Operace {
def spustit() = zarovka.vypnout()
}
object ZkouskaZarovky {
def main(args: Array[String]) {
val zarovka = new Zarovka()
val zapnout = new ZapnoutZarovku(zarovka)
val vypnout = new VypnoutZarovku(zarovka)
val vypinac = new Vypinac()
vypinac.provest(zapnout);
vypinac.provest(vypnout);
vypinac.provest(zapnout);
vypinac.provest(vypnout);
}
}
Související články#edit
Externí odkazy#edit
- Obrázky, zvuky či videa k tématu Command na Wikimedia Commons
- [1]
Categories Návrhové vzory
This article is mirrored from “Command” on Čeština Wikipedia, revision 26150203, written by Wikipedia's contributors and licensed CC BY-SA 4.0. Editing it here creates a Quire copy with its own history.
Synced with Wikipedia revision 26150203 · just now