Wzorce projektowe

Przed powstaniem tego strony miałem zamiar podszlifować wiedzę z zakresu wzorców projektowych, postanowiłem, że wykorzystam min. ten temat, aby utworzyć bloga z zagadnieniami z których być może ktoś będzie czerpał korzyści. Tym artykułem chciałbym rozpocząć cykl, w którym zajmiemy się analizą mam nadzieję znaczną ilością wzorców projektowych, w przykładach będę posługiwał się językiem C#.

Wzorce projektowe

Wzorce projektowe

Wzorce projektowe – jaki cel?

W programowaniu tak jak i w życiu spotykamy się często z podobnymi sytuacjami. Gdy w życiu codziennym wykonujemy jedną czynność wiele razy wypracowywujemy sobie schemat, który po pewnym czasie wykonujemy już półautomatycznie. Nie poprę tego badaniami, ale podejrzewam, że algorytm parzenia herbaty w Europie jest u większości ludzi zdumiewająco podobny. Gdybyśmy za każdym razem parzyli herbatę nie pamiętając naszych poprzednich razów, prawdopodobnie wykonywalibyśmy tę czynność nie poradnie, zostawiając bałagan, a może i kawałek zdrowia.

Podobnie w programowaniu, programiści wypracowali uniwersalne rozwiązania dla często pojawiających się problemów zwane wzorcami projektowymi. Takie szablony opisujące rozwiązanie problemu ułatwiają tworzenie oprogramowania, pielęgnację kodu, pracę w zespole czy pracę z legacy code.

Klasyfikacja wzorców

Wzorce projektowe można podzielić na trzy zbiory:

  • wzorce kreacyjne (creational patterns) – opisują tworzenie nowych obiektów klasy,
  • wzorce strukturalne (structural patterns) – opisują budowę powiązań między obiektami,
  • wzorce czynnościowe (beharovial patterns) – opisują zachowanie obiektów, które ze sobą współpracują.

Wzorce projektowe

Wzorce kreacyjne:

  • Budowniczy (builder),
  • Fabryka abstrakcyjna (abstract factory),
  • Metoda wytwórcza (factory method),
  • Prototyp (prototype),
  • Singleton (singleton) – pilnuje, aby klasa była reprezentowana maksymalnie przez jedną instancję.

Wzorce strukturalne:

  • Adapter (adapter),
  • Dekorator (decorator) – wzbogaca klasę o nowe funkcjonalności w trakcie działania programu,
  • Fasada (facade) – udostępnia złożony system w postaci uproszczonej klasy, która ułatwia użycie funkcjonalności systemu,
  • Kompozyt (composite) – pozwala operować na grupie obiektów, tak jakby była pojedynczym elementem,
  • Most (bridge),
  • Pełnomocnik (proxy),
  • Pyłek (flyweight).

Wzorce czynnościowe:

  • Interpreter (interpreter),
  • Iterator (iterator),
  • Łańcuch zobowiązań (chain of responsibility),
  • Mediator (mediator),
  • Metoda szablonowa (template method),
  • Obserwator (observer) – informuje obserwatorów o zmianie w obserwowanym obiekcie,
  • Odwiedzający (visitor),
  • Pamiątka (memento),
  • Polecenie (command),
  • Stan (state),
  • Strategia (strategy).

Podsumowanie

W tym wpisie dowiedzieliśmy się co to są wzorce projektowe oraz dokonaliśmy ich podstawowej klasyfikacji na kreacyjnestrukturalne oraz czynnościowe.

Wzorce projektowe są nieodłącznym elementem w pracy każdego programisty. Naturalnie nie trzeba każdego znać na pamięć, ale wraz ze zdobywaniem doświadczenia przyzwoite jest powiększanie koszyka wzorców, które jesteśmy w stanie zaimplementować po spojrzeniu na ich schemat graficzny. Myślę, że młodszy programista powinien dobrze czuć się ze swoją wiedzą, gdy zna i umie stosować kilka podstawowych wzorców projektowych.

 

Dodaj komentarz