Command

návrhový vzor

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

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

Externí odkazy

Reference