Wzorce projektowe: Most(Bridge)

Siema wszystkim! Dzisiaj o wzorcu projektowym Most(Bridge) , jednak zmienimy trochę formę wpisu na bardziej uporządkowany, więc przejdźmy do tematu 🙂

 

Cel:

  • Rozdziela abstrakcje od implementacji.
  • Klasy mają nie wiedzieć o sobie.

 

Problem, który rozwiązuje:

  • Możliwości klasy są większe (m.i.n przez dziedziczenie)
  • Zachowujemy zasadę hermetyzacji
  • Moduły są niezależne od siebie
  • Klient nie widzi implementacji, dzięki temu przy zmianie implementacji nie będziemy musieli zmieniać interfejsu.

 

Użyj wtedy kiedy:

  • Masz wiele klas, które dziedziczą po klasie abstrakcyjnej
  • Chcemy oddzielić implementację od klienta.
  • Musisz zaplanowac hierarchię klas
  • Chcesz podzielić implementację między wiele obiektów

Również wtedy kiedy:

To wtedy wzorzec Most umożliwia zmienienie na:

Czyli stosujemy kompozycję.

 

Dyskusja

Jak to się mówi „Kompozycja ponad dziedziczeniem„. Czy to prawda?  W niektórych przypadkach tak, zwłasza jeśli tak jak w przykładzie powyżej mamy pełno klas pochodnych na przykładzie tego:

To lepiej utworzyć coś na podstawie tego za pomocą wzorca Most:

 

Struktura

Poniżej jest diagram UML wzroca Most(Bridge), który wyraźnie pokazuje, że klient nie chce znać szczegółów implementacji, oraz że, abstrakcja obiektu jest oddzielona od implementacji.

 

Przykład

A teraz przykład w postaci kodu:

Oczywiście abstrakcją jest tutaj klasa Bridge, używając dependency injection wstrzykujemy do konstruktora klasy BridgeImplementation, która dziedziczy po klasie Bridge obiekt klasy na którym chcemy operować i w kliencie wywołujemy jej metody.

 

Praktyczny przykład z życia wzięty

Żebyś mógł jeszcze lepiej zrozumieć oddzielenie implementacji od abstrakcji obiektu, posłużę się obrazkiem, którego znalazłem gdzieś w sieci, który obrazuje dobrze działanie Mostu, czyli oddzielenie implementacji od interfejsu.

Abstrakcją jest Klasa Mostu, która obrazuje co ma robić przycisk np w telewizorze, implementacją jest już obiekt telewizora, radia lub lampki.

Podam przykład taki jaki był na wcześniej na obrazku, tylko przeniesiemy go do kodu.

Mostem jest tutaj klasa abstrakcyjna Switch, implementacją klasy TV, Radio, Lamp.

Sprawa wygląda podobnie jak we wcześniejszym przykładzie, do klasy ClickSwitch, która dziedziczy po klasie Switch, przekazujemy obiekt klasy do konstruktora za pomocą dependency injection i wywołujemy metody On oraz Off.

Wynik:

 

Podobieństwa od innych wzorców

Wzorzec Most jest dosyć podobny do fasady lub adaptera. Jednak fasada różni się głównie tym, że ma po prostu udostępniać prosty interfejs klientowi, a adapter ma łączyć ze sobą niepasujące interfejsy, przy mniejszych projektach implementacja tych wzorców nie różni się bardzo jednak przy większych projektach widać duże różnice.

 

Podsumowanie

I Siup 🙂

I to wszystko na temat wzorca Most🙂

Link do githuba ze wszystkimi przykładami:  https://github.com/Slaw145/BridgeTutorial

W następnym artykule, będzie mowa o wzorcu Pełnomocnik(Proxy).

Standardowo, przypominam o newsletterze, którym wysyłam powiadomienia o nowych wpisach oraz dodatkowe informacje na temat, ogółem mówiąc, świecie IT.

KONIECZNIE dołącz do społeczności DevmanCommunity na fb, części społeczności jest w jednym miejscu 🙂

-strona na fb: Devman.pl-Sławomir Kowalski

-grupa na fb: DevmanCommunity

Pytaj, komentuj pod spodem na końcu wpisu, podziel się nim, oceń go, rób co wolisz🙂

Trzymaj się 🙂

 
Jeśli ten wpis ci się przydał podziel się nim ze swoimi znajomymi :)

Post a comment

avatar
  Subscribe  
Notify about