Design Mønster – kommando Design Mønster forenklet

der er mange kommando mønster forklaring derude, men jeg fandt det lidt svært at fordøje eller forstå eksemplet i disse blogs/indlæg.
så her vil jeg forsøge at forklare på den måde, jeg forstod.

for at forstå kommandomønster kan vi gå tilbage til 1990 ‘erne, da vi havde store tv’ er uden fjernbetjening(i det mindste i Indien). Gode gamle dage 😉

vi havde alle knapper til on/off, øge/formindske mængder.

alt var godt, fungerede fint, det eneste problem var, hvis nogen ville tænde/slukke for TV ‘et eller reducere/øge lydstyrken, de måtte gå helt til TV’ et og bruge knappen.

tænk nu dette på en objektorienteret måde. Et TV er et objekt, der har en masse operationer/metoder/funktioner eller “Kommando”. Vi har direkte adgang til TV-objektet for at påkalde disse kommandoer.

problemet med denne tilgang?

  1. du har brug for objektet til at påkalde en kommando — Gå derfor hele vejen til TV ‘ et
  2. hvert TV har sin egen implementering af start / stop, og vi er ikke i stand til at genbruge “Kommandoindkaldelse”
  3. hvis en anden enhed siger “Set-top-boks” ønsker den samme funktionalitet, er der ingen måde at genbruge de samme operationer — “Universal Remote”

Hvordan kan vi løse dette?

Forestil dig, at TV ‘ et har en grænseflade, der implementerer tænd/sluk og anden funktionalitet og udsætter disse metoder/operationer ved at give forekomsten af grænsefladen til et “andet objekt”. Det kunne løse vores problem. Lad os komme ind i kode:

først opretter vi en TV-klasse, som har operationerne til/fra.

IDevice.java
TV.java

ligeledes opretter vi en Set-top-boksklasse, da vi opretter en universel fjernbetjening.

Indstillingsboks.java

nu hvor vi har defineret vores enheder og dens operationer, har vi brug for en klasse(kommando), der kan holde objekter af TV/Settopboks og påberåbe sig disse operationer.

lad os oprette vores kommandoklasse. Da vi vil udføre to operationer på disse enheder, vil Kommandoklassen “have” et objekt af IDevice-type.
vi har brug for to kommandoer “ON”og ” OFF”.
disse On / Off kommandoobjekter vil have en udførelses funktion / metode, som vil påberåbe sig den respektive handling på den enhed, den har.

hvis du har bemærket, har jeg oprettet klasserne med navnet “OnCommad” og ikke “TVOnCommand”. Ideen er at genbruge kommandoklassen til forskellige enheder. Det er vores universelle kommando, som understøtter enhver enhed.
dette gør det muligt for os at oprette en universel fjernbetjening. Bingo!!!!

indtil nu har vi abstraheret enhedsoperationerne i form af “kommando”. Det eneste der er tilbage for os er at oprette en fjernbetjeningkontrol, for at udløse “kommandoen”.

før vi opretter fjernbetjening, skal vi oprette knapper, og hver knap udfører den respektive kommando.

Fjernbetjeningenklassen har et kommandoobjekt, som udføres, når der trykkes på knappen.

Fjernknap.java

lad os endelig oprette vores fjernbetjeningsenhed, som vil have flere knapper til hver operation.
når vi opretter en fjernbetjeningsenhed(ved hjælp af constructor), vil vi instantiere alle objekter og tildele.

Fjernstyringsenhed.java

hvis du ser på ovenstående kode, har vi defineret flere knapper i Vores fjernbetjening, og vi forsøger at lave Universal remote.

vi er klar til at skabe og lege med vores RemoteControlDevice 🙂

Output:

TV is on!
TV is off!
SetTopBox is on!
SetTopBox is off!Process finished with exit code 0

som det ses i output har jeg trykket på forskellige knapper for at udføre et sæt operationer på enhederne.

så kort sagt er ideen at give klienten(psvm/TV-bruger) en fjernbetjening i stedet for at få dem til at gå helt til TV eller give TV til at tænde/slukke for TV 😀

konklusion

i dette indlæg talte vi om Kommandodesignmønsteret.
i enkle ord:

ideen er at indkapsle operationerne i et andet objekt(kommando) og genbruge og derefter oprette flere knapper til at udføre disse kommandoobjekter, der har enhedsoperationer i den.

som sædvanlig kan du finde al koden på min GitHub.

You might also like

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.