Wzorce projektowe – co trzeba o nich wiedzieć

Wzorce projektowe to klasyczne zagadnienie w nauce programowania. Jest to jedno z najczęstszych zagadnień testowanych na rozmowach kwalifikacyjnych. Nie da się przejść przez proces nauki jakiegokolwiek języka bez zderzenia się z tym tematem. Czy są wzorce projektowe i dlaczego jest o nich tak głośno?

Co to wzorzec projektowy?

Zgodnie z oficjalną definicją wzorzec projektowy jest to:

uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.

Wikipedia

Powyższe objaśnienie jest w poprawne, ale też bezużyteczne w praktyce. Niestety w większości przypadków nauka wzorców projektowych polega a technice wkuj-zapomnij. Postaram się przybliżyć ten temat w sposób, który ułatwi zrozumienie i zastosowanie wzorców.

Dlaczego znajomość wzorców jest ważna?

Pierwszy i prozaiczny powód to rozmowy kwalifikacyjne. Jest to temat nader często testowany i ich nieznajomość mści się okrutnie podczas szukania pracy. Poznanie kilku podstawowych znacznie zwiększa szansę na dostanie pracy.

Poza tym wzorce to nie tylko formułka, którą trzeba na życzenie recytować na rozmowie kwalifikacyjnej. Po latach ich nauki i stosowania stwierdzam że są po prostu logicznym rozszerzeniem fundamentalnych zasad programowania. Wzorce promują programowanie spełniające takie zasady jak SOLID, czy KISS. Stosując wzorce bardzo ciężko popełnić błędy w stylu duplikowania kodu, czy tworzenia kodu opornego zmianom. W skrócie… wzorce uczą fundamentalnych zasad używając konkretnych rozwiązań.

W jaki sposób używać wzorców?

Tak samo jak we wszystkim da się przesadzić w stosowaniu wzorców. Widziałem nie raz wzorce wciskane na siłę. W praktyce jednak zwykle jest na odwrót, czyli jest tworzony kod, który zyskał by bardzo dużo na ich zastosowaniu.

Nauczony wzorzec powinien być narzędziem, które może być zastosowane jak tylko dostrzeżemy stosowne miejsce. Nie “szukamy” specjalnie miejsc gdzie można by wcisnąć więcej wzorców. Zwykle najlepiej mieć je w tyle głowy podczas pisania i stosować używając zdrowego rozsądku.

Dla przykładu kilka konkretnych zastosowań:

  • dostrzegamy w kodzie kawałek logiki, która będzie zrealizowana wiele różnych sposobów, zamiast tworzyć paskudną “drabinkę if-ów”, stosujemy wzorzec Strategia
  • procedura tworzenia obiektu jest złożona i zaczyna wyciekać poza obiekt, stosujemy Metodę wytwórczą, by ją okiełznać
  • zauważamy dwa obiekty o różnym interfejsie i chcemy jest skomunikować, zamiast ogromnych modyfikacji dotykających wszystkich użyć interfejsów stosujemy Adapter
  • zauważamy, że dane zdarzenie w systemie będzie komunikowane do wielu różnych obiektów w przyszłości, zamiast tworzyć sztywny kod wywołujący obiekty bezpośrednio stosujemy Obserwatora
  • mamy przypadek, w którym pewne dane stają się globalne dla aplikacji i musimy mieć ich tylko jedną kopię, zamiast ryzykować ich duplikacji przez tworzenie zwykłych obiektów stosujemy Singleton

Podsumowanie

Wzorce projektowe są jedną z “must have” rzeczy w programowaniu, dlatego też warto nauczyć się ich jak najszybciej. Polecam przejść przez poniższą listę i zastosować każdy z nich na realnym przykładzie:

  • strategy
  • observer
  • singleton
  • proxy
  • builder
  • iterator
  • adapter
  • facade
  • factory/factory method/abstract factory
  • template
  • composite
  • state
  • decorator

Leave A Comment