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.”
[…] 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 […]