Command Design Pattern

Intent

  • inkapsla en begäran som ett objekt, vilket gör att du parametrizeclients med olika förfrågningar, kö eller logga förfrågningar, och supportundoable operationer.
  • främja ”anrop av en metod på ett objekt” till full objektstatus
  • en objektorienterad återuppringning

Problem

behöver utfärda förfrågningar till objekt utan att veta något om driften som begärs eller mottagaren av begäran.

diskussion

kommandot frikopplar objektet som anropar operationen från ensom vet hur man utför det. För att uppnå denna separation, designernskapar en abstrakt basklass som kartlägger en mottagare (ett objekt) med anaction (en pekare till en medlemsfunktion). Basklassen innehåller en execute() – metod som helt enkelt kallar åtgärden på mottagaren.

alla klienter i Kommandoobjekt behandlar varje objekt som en ”svart ruta” genom att helt enkelt åberopa objektets virtuella execute() – metod närhelst klienten kräver objektets ”tjänst”.

en Kommandoklass innehåller en delmängd av följande: ett objekt, amethod som ska tillämpas på objektet och argumenten som ska skickas närmetoden tillämpas. Kommandos” execute ” – metod orsakar dåstyckena att komma ihop.

sekvenser av Kommandoobjekt kan monteras i komposit (eller Makro)kommandon.

struktur

klienten som skapar ett kommando är inte samma klient som executesit. Denna separation ger flexibilitet i timing och sekvenseringav kommandon. Materialiserande kommandon som objekt innebär att de kan passeras, iscensatt, delas, laddas i en tabell, och på annat sätt instrumentedor manipuleras som alla andra objekt.

Kommandoobjekt kan betraktas som” tokens ” som skapas aven klient som vet vad som behöver göras och skickas till en annanklient som har resurser för att göra det.

exempel

Kommandomönstret gör att förfrågningar kan inkapslas som objekt,vilket gör att klienter kan parametriseras med olika förfrågningar.”Check” på en middag är ett exempel på ett Kommandomönster. Waitereller servitrisen tar en order eller ett kommando från en kund och inkapslar den beställningen genom att skriva den på checken. Ordern köas sedan för ashort order cook. Observera att dynan av ”kontroller” som används av varje servitör ärinte beroende av menyn, och därför kan de stödja kommandon tilllaga många olika saker.

checklista

  1. definiera ett Kommandogränssnitt med en metodsignatur som execute().
  2. skapa en eller flera härledda klasser som inkapslar någon delmängd av följande: ett ”mottagare” – objekt, metoden att åberopa, argumenten att passera.
  3. instansiera ett Kommandoobjekt för varje uppskjuten exekveringsbegäran.
  4. skicka Kommandoobjektet från skaparen (aka avsändare) till invoker (aka mottagare).
  5. invoker bestämmer när man ska execute().

tumregler

  • kedja av ansvar, kommando, medlare och observatör, adress hurdu kan koppla bort avsändare och mottagare, men med olika avvägningar.Kommando anger normalt en avsändare-mottagare anslutning med asubclass.
  • Ansvarskedja kan använda kommandot för att representera förfrågningar somobjekt.
  • kommando och Memento fungerar som magiska tokens som ska skickas runt och invokedat en senare tidpunkt. I Kommando representerar token en begäran; inmento representerar det ett objekts interna tillstånd vid en viss tid. Polymorfism är viktigt att beordra, men inte till minne eftersomdess gränssnitt är så smalt att ett minne bara kan skickas som avalue.
  • kommandot kan använda Memento för att behålla det tillstånd som krävs för en ooperation.
  • makrokommandon kan implementeras med komposit.
  • ett kommando som måste kopieras innan det placeras på en historiklista fungerar som en prototyp.
  • två viktiga aspekter av Kommandomönstret: gränssnittsseparation(invoker är isolerad från mottagaren), tidsseparation (storesa ready-to-go processing request som ska anges senare).

stöd vår gratis hemsida och äger eBook!

  • 22 designmönster och 8 principer förklaras på djupet
  • 406 välstrukturerade, lättlästa, jargongfria sidor
  • 228 tydliga och hjälpsamma illustrationer och diagram
  • ett arkiv med kodexempel på 4 språk
  • alla enheter som stöds: EPUB/MOBI/PDF-format

Läs mer…

Lämna ett svar

Din e-postadress kommer inte publiceras.