Design Pattern-Command Design Pattern Simplified

er zijn veel Commando pattern uitleg die er zijn, maar ik vond het een beetje moeilijk om het voorbeeld in die blogs/berichten te verwerken of te begrijpen.
dus, hier zal ik proberen uit te leggen op de manier die ik begreep.

om het opdrachtpatroon te begrijpen gaan we terug naar de jaren 1990 toen we enorme tv ‘ s hadden zonder afstandsbediening(tenminste in India). Goeie ouwe tijd.;)

We hadden alle knoppen voor aan / uit, verhogen/verlagen volumes.

alles was goed, werkte prima, het enige probleem was dat als iemand de TV aan/uit wilde zetten of het volume wilde verminderen/verhogen, hij helemaal naar de TV moest gaan en de knop moest gebruiken.

denk dit nu op een objectgeoriënteerde manier. Een TV is een object dat een heleboel operaties/methoden/functies of “commando”heeft. We hebben direct toegang tot het tv-object om deze commando ‘ s aan te roepen.

het probleem met deze aanpak?

  1. u hebt het object nodig om een commando aan te roepen – dus loop helemaal naar de TV
  2. elke TV heeft zijn eigen implementatie van start / stop en we zijn niet in staat om de “Command invocation”
  3. opnieuw te gebruiken als een ander apparaat zegt “Settop Box” dezelfde functionaliteit wil, geen manier om dezelfde bewerkingen opnieuw te gebruiken — “Universal Remote”

Hoe kunnen we dit oplossen?

stel je voor dat de TV een interface heeft die aan/uit en andere functionaliteit implementeert en deze methoden/operaties blootlegt, door de instantie van de interface aan een “ander object”te geven. Dat kan ons probleem oplossen. Laten we in code gaan:

eerst maken we een TV-klasse aan, die de bewerkingen aan/uit heeft.

IDevice.java
TV.java

op dezelfde manier zullen we een Set-top box class maken als we een universele remote maken.

SetTopBox.java

nu we onze apparaten en zijn operaties hebben gedefinieerd, hebben we een klasse(commando) nodig die objecten van TV/SetTopBox kan behouden en deze operaties kan aanroepen.

laten we onze commandoclasse maken. Omdat we twee bewerkingen op deze apparaten willen uitvoeren, zal de Opdrachtklasse een object van het type IDevice “hebben”.
we hebben twee commando ‘s” ON “en”OFF” nodig.
deze aan / uit opdrachtobjecten hebben één uitvoerfunctie / methode, die de betreffende bewerking op het apparaat dat het heeft zal aanroepen.

als je het gemerkt hebt, heb ik de klassen gemaakt met de naam “Oncompad” en niet “TVOnCommand”. Het idee is om de command class opnieuw te gebruiken voor verschillende apparaten. Dat is ons universele commando, dat elk apparaat ondersteunt.
dit stelt ons in staat om een universele remote aan te maken. Bingo!!!!

tot nu toe hebben we de apparaatbewerkingen geabstraheerd in de vorm van “Command”. Het enige wat overblijft voor ons is om een RemoteControl te maken, om het “commando”te activeren.

voordat we afstandsbediening maken, moeten we knoppen maken en elke knop zal het betreffende commando uitvoeren.

de RemoteButton-klasse heeft een opdrachtobject, dat wordt uitgevoerd wanneer de knop wordt ingedrukt.

RemoteButton.java

laten we tot slot Onze Afstandsbediening maken, die meerdere knoppen heeft voor elke operatie.
wanneer we een afstandsbediening maken(met behulp van constructor), zullen we alle objecten instantiëren en toewijzen.

RemoteControlDevice.java

als je naar de bovenstaande code kijkt, hebben we meerdere knoppen gedefinieerd in onze Remote en proberen we Universal remote te maken.

we zijn helemaal klaar om te maken en af te spelen met ons RemoteControlDevice 🙂

uitvoer:

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

zoals te zien in de uitvoer heb ik verschillende knoppen ingedrukt, om een reeks bewerkingen uit te voeren op de apparaten.

dus, kortom, het idee is om de client(psvm/TV gebruiker) een afstandsbediening te geven in plaats van ze helemaal naar TV te laten lopen of TV te geven om TV aan/uit te zetten 😀

conclusie

in dit bericht hebben we het gehad over het Command design pattern.
in eenvoudige woorden:

het idee is om de operaties in een ander object(Commando) te kapselen en te hergebruiken en vervolgens verschillende knoppen te maken om deze opdrachtobjecten uit te voeren die apparaatbewerkingen in zich hebben.

zoals gewoonlijk kunt u alle code op mijn GitHub vinden.

You might also like

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.