Design Pattern – Command Design Pattern Simplified

istnieje wiele wyjaśnień wzorców poleceń, ale uważam, że jest to nieco trudne do strawienia lub zrozumienia przykładu podanego w tych blogach/postach.
więc tutaj postaram się wyjaśnić w sposób, w jaki zrozumiałem.

aby zrozumieć wzorzec poleceń, cofnijmy się do lat 90-tych, kiedy mieliśmy ogromne telewizory bez pilota(przynajmniej w Indiach). Stare dobre czasy 😉

mieliśmy wszystkie pokrętła do włączania / wyłączania, zwiększania / zmniejszania głośności.

wszystko było dobrze, działało dobrze, jedynym problemem było to, że jeśli ktoś chciał włączyć/wyłączyć telewizor lub zmniejszyć / zwiększyć głośność, musiał przejść całą drogę do telewizora i użyć pokrętła.

teraz pomyśl o tym w sposób obiektowy. TV jest obiektem, który ma kilka operacji / metod/funkcji lub „polecenia”. Mamy bezpośredni dostęp do obiektu TV, aby wywołać te polecenia.

problem z takim podejściem?

  1. potrzebujesz obiektu do wywołania polecenia — stąd idź aż do telewizora
  2. każdy telewizor ma własną implementację start/stop i nie jesteśmy w stanie ponownie użyć „wywołania polecenia”
  3. jeśli inne urządzenie mówi „Dekoder” chce tej samej funkcjonalności, nie ma sposobu na ponowne użycie tych samych operacji- „Universal Remote”

jak możemy to rozwiązać?

wyobraź sobie, że telewizor ma interfejs, który implementuje włączanie / wyłączanie i inne funkcje i eksponuje te metody / operacje, dając instancję interfejsu „innemu obiektowi”. To może rozwiązać nasz problem. Przejdźmy do kodu:

najpierw utworzymy klasę TV, która będzie miała włączone/wyłączone operacje.

IDevice.java
TV.java

podobnie, stworzymy klasę dekodera, ponieważ tworzymy uniwersalnego pilota.

SetTopBox.java

teraz, gdy zdefiniowaliśmy nasze urządzenia i ich operacje, potrzebujemy klasy(polecenia), która może przechowywać obiekty TV/SetTopBox i wywoływać te operacje.

stwórzmy naszą klasę komend. Ponieważ chcemy wykonać dwie operacje na tych urządzeniach, Klasa Command będzie „miała” obiekt typu IDevice.
potrzebujemy dwóch komend ” ON ” i „OFF”.
te obiekty poleceń On/Off będą miały jedną funkcję/metodę execute, która wywoła odpowiednią operację na posiadanym urządzeniu.

Jeśli zauważyłeś, utworzyłem klasy o nazwie” Oncommad”, a nie”TVOnCommand”. Chodzi o to, aby ponownie użyć klasy command dla różnych urządzeń. To nasze uniwersalne polecenie, które obsługuje każde urządzenie.
to pozwoli nam stworzyć uniwersalnego pilota. Bingo!!!!

do tej pory wyabstrahowaliśmy operacje urządzenia w formie „polecenia”. Jedyne, co nam pozostało, to stworzyć RemoteControl, aby wyzwolić „polecenie”.

zanim stworzymy pilota, musimy utworzyć przyciski i każdy przycisk wykona odpowiednie polecenie.

Klasa RemoteButton posiada obiekt polecenia, który jest wykonywany po naciśnięciu przycisku.

java

na koniec stwórzmy nasze urządzenie zdalnego sterowania, które będzie miało wiele przycisków dla każdej operacji.
kiedy tworzymy urządzenie zdalnego sterowania (za pomocą konstruktora), tworzymy instancje wszystkich obiektów i przypisujemy je.

RemoteControlDevice.java

jeśli spojrzysz na powyższy kod, zdefiniowaliśmy wiele przycisków w naszym zdalnym i staramy się zrobić Universal remote.

wszyscy jesteśmy gotowi do tworzenia i zabawy z naszym RemoteControlDevice 🙂

wyjście:

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

jak widać na wyjściu nacisnąłem różne przyciski, aby wykonać zestaw operacji na urządzeniach.

tak więc, krótko mówiąc, chodzi o to, aby dać klientowi (użytkownikowi psvm/TV) pilota zamiast zmuszać go do chodzenia aż do TELEWIZORA lub dawania telewizorowi włączania / wyłączania telewizora 😀

wniosek

w tym poście rozmawialiśmy o wzorze projektowania poleceń.
w prostych słowach:

chodzi o to, aby zamknąć operacje w innym obiekcie (poleceniu)i ponownie użyć, a następnie utworzyć kilka przycisków do wykonania tych obiektów poleceń, które mają operacje na urządzeniu.

jak zwykle cały kod znajdziesz na moim Githubie.

You might also like

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.