Design Patterns, Hit czy Kit?

Wzorce Projektowe

Co to jest Wzorzec Projektowy (Design Pattern)?

Zacznijmy od garści teorii, czym w zasadzie jest wzorzec projektowy? Po co w ogóle coś takiego jak wzorzec projektowy?

W programowaniu obiektowym wzorzec projektowy jest to opis rozwiązania problemu. Dla powtarzalnych problemów opracowano sprawdzone w praktyce i uniwersalne rozwiązania opisujące zależności i powiązania między klasami i obiektami których “problem” dotyczy. Warto zaznaczyć, że nie skupiają się na funkcjonowaniu poszczególnych elementów.

Zalety Wzorców Projektowych

  • bogatszy o wiedzę, łatwiej dostosujesz gotowe rozwiązania zamiast “wynajdywać koło na nowo”,
  • usprawnia komunikację w zespole – podanie nazwy wzorca jest o wiele szybsze niż tłumaczenia całego algorytmu
  • ułatwia tworzenie, utrzymanie i modyfikację kodu źródłowego
  • znajomość daje dodatkowe punkty na rozmowach kwalifikacyjnych
    – nie tylko wykucie teorii, ale też zrozumienie i umiejętność dopasowania i zastosowania odpowiedniego wzorca
  • standaryzacja kodu poprawia jego czytelność, a także wydajność
  • wypróbowane rozwiązania problemów, mogą przyspieszyć proces rozwoju oprogramowania

Wady Wzorców Projektowych

  • stosowanie wzorców projektowych bez dopasowania do kontekstu projektu
  • stosowanie wzorców projektowych “na siłę” gdzie tylko się da, pomimo, że wystarczyłby prostszy kod
  • nieumiejętne bądź nieodpowiednie zastosowanie wzorców, może przynieść negatywne skutki:
    • w samym działaniu kodu,
    • wydłużenie czasu tworzenia kodu,
    • utrudnić późniejsze jego utrzymanie.

Wzorzec Projektowy – Konstrukcja

Na Wzorzec Projektowy składają się jego cztery główne elementy:

  • Nazwa – możliwie unikalna i opisująca idee wzorca.
  • Problem – określenie warunków, w których zastosowanie wzorca ma sens oraz sposoby rozpoznawania takich sytuacji.
  • Rozwiązanie – wskazówki implementacyjne połączone z opisem danego rozwiązania – relacje i powiązania poszczególnych klas i obiektów.
  • Konsekwencja – zestawienie zalet i wad zastosowania wzorca

Wzorzec Projektowy – Podział

Podział wzorców projektowych w oparciu o dwa modele klasyfikacji wzorców przedstawione w „Inżynieria oprogramowania: Wzorce Projektowe” bazuje na kategoryzacji według zakresów stosowania wzorca (dla obiektów, czy dla klas) oraz rodzaju wzorca, opisując to co on robi. 

W wyniku tych kategoryzacji otrzymujemy podział na:

  • Wzorce Strukturalne
    • Zachowując efektywność i elastyczność kodu, pozwala składać większe struktury z klas i obiektów
    • Adapter, Dekorator, Fasada, Kompozyt, Most, Pełnomocnik, Pyłek
  • Wzorce Kreacyjne
    • Zwiększają elastyczność i ułatwiają ponowne wykorzystanie kodu. Są źródłem różnych narzędzi tworzenia obiektów
    • Budowniczy, Fabryka Abstrakcyjna, Metoda Wytwórcza, Prototyp, Singleton
  • Wzorce Operacyjne/Czynnościowe
    • Podział zadań między obiektami i algorytmy
    • Łańcuch odpowiedzialności, Polecenie, Interpreter, Iterator, Mediator, Memento, Metoda Szablonowa, Obserwator, Strategia, Wizytator

Szerszy podział wzorców i więcej o samych wzorcach znajdziesz w eBooku, który możesz otrzymać klikając w okładkę poniżej. Konkretnymi wzorcami i ich analizą zajmę się w kolejnych wpisach.

Podsumowanie

W programowaniu nie ma jednego dobrego rozwiązania. Nie ma złotego środka do osiągnięcia celu. W każdym wypadku ważna jest równowaga i analiza zalet i wad. Warto się zastanowić, czy jest sens stosowania wzorca, czy może wystarczy prosty kawałek kodu który zrealizuje pożądaną logikę?

Zainteresował Cię materiał? Zapisz się do newslettera w prawym panelu, by być na bieżąco z kolejnymi opracowaniami wzorców oraz aktualnościami na blogu.

Opracowano na podstawie: “Design Patterns: Elements of Reusable Object-Oriented Software, ​ISBN 978-0-201-63361-0​.”

Subscribe
Powiadom o
guest
1 Komentarz
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
trackback
2 lat temu

[…] czy Singleton to wzorzec który pasuje do Twojego problemu, czy może inny Wzorzec Projektowy byłby lepszy, a może prosty kod będzie odpowiedni […]