Wzorce projektowe – czym są?
Ostatnia aktualizacja 28 października, 2022
Szybkie rozwiązywanie problemów programistycznych jest cenną umiejętnością w pracy nad kodem. Wiele problemów projektowych jest powtarzalnych, dlatego na bazie ich specyfiki i możliwych rozwiązań powstały wzorce projektowe. Czym są dokładnie? W jaki sposób są zbudowane?
Ostatnia aktualizacja: 28.10.2022. Dodaliśmy przykłady popularnych wzorców projektowych.
Wzorce projektowe – definicja
Wzorce projektowe stanowią rozwiązania powtarzalnych problemów projektowych, zatem są opisem uniwersalnego sposobu implementacji rozwiązań programistycznych, który powstał w oparciu o doświadczenie wielu programistów.
Wśród wzorców projektowych można wyróżnić kilkadziesiąt sposobów podzielonych na kategorie. Każda z kategorii dotyczy problemu programistycznego, który może się powtarzać podczas tworzenia różnych projektów.
Celem wzorców projektowych jest przyspieszenie i usprawnienie pracy nad kodem dzięki zastosowaniu najlepszych zebranych rozwiązań, które zostały sprawdzone w praktyce.
Wzorce nie są jednak gotowym do kopiowania kodem, więc nie można ich skopiować bezpośrednio. Stanowią pewną koncepcję, w oparciu o którą programista może zaimplementować optymalne dla projektu rozwiązanie.
Zobacz: Agile
Wzorce projektowe – co się na nie składa?
W skład wzorców projektowych wchodzi kilka sekcji, wśród których wymienia się:
1. Cel , który ogólnie opisuje problem oraz rozwiązanie.
2. Motywację rozszerzającą opis problemu i rozwiązania.
3. Strukturę klas, która uwidacznia sposób powiązania ze sobą różnych części wzorca.
4. Przykładowy kod napisany w wybranym języku programowania, który służy lepszemu zrozumieniu zastosowania danego wzorca.
Klasyfikacja wzorców projektowych
Charakterystyka poszczególnych wzorców projektowych jest zróżnicowana, a więc spośród grup wzorców można wyróżnić trzy główne:
Wzorce kreacyjne
Cechują się elastycznym mechanizmem tworzenia obiektów oraz umożliwiają ponowne wykorzystanie kodu. Dotyczą tworzenia klas, metod, a także typów danych.
Wśród wzorców kreacyjnych znajdują się: Factory Method, Abstract Factory, Builder, Prototype i Singleton.
Wzorce strukturalne
Opisują metody budowania struktur składających się z klas i obiektów, które umożliwiają zachowanie elastyczności.
Do wzorców strukturalnych należą: Adapter, Bridge, Composite, Decorator, Facade, Flyweight i Proxy.
Wzorce behawioralne
Służą do komunikacji oraz podziału zadań między obiektami.
Wzorce behawioralne to: Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method oraz Visitor.
Sprawdź: Zenly
Przykłady popularnych wzorców projektowych
Singleton
Singleton to kreacyjny wzorzec projektowy. Stosując wzorzec singleton możemy zapewnić, że w programie pojawi się jedynie jeden obiekt danej klasy. Wzorzec można zastosować w różnych przypadkach, w których wymagane jest przechowywanie globalnego stanu aplikacji, np. w formie zmiennych. W porównaniu do stosowania zmiennych globalnych wykorzystanie singletona nie zaśmieca globalnej przestrzeni nazw.
Dekorator
Dekorator to przykład strukturalnych wzorców projektowych. Jest alternatywą dla dziedziczenia, w którym rozszerzanie funkcji klasy bazowej jest dokonywane na etapie kompilacji. W przypadku dekoratorów rozwijanie oryginalnej klasy następuje w trakcie działania programu. Dzięki temu uzyskano większą elastyczność niż w przypadku dziedziczenia. Dodatkowym atutem dekoratorów jest możliwość tworzenia klas na wysokich poziomach hierarchii, które nie zawierają nadmiernej liczby metod.
Obserwator / obserwowany
Wzorzec czynnościowy obserwatora / obserwowanego służy do informowania obiektu obserwatora o zmianie stanu obiektu obserwowanego. Zastosowanie wzorca uniezależnia obiekty obserwatora i obserwowanego od siebie. Programista unika w ten sposób tworzenia trudnych do rozbudowy sytuacji, w których zmiany w obrębie jednego obiektu wymagają zmian w innym obiekcie.
Wzorce projektowe – najczęstsze zarzuty
Ze względu na pewien stopień uniwersalności rozwiązań, wzorce projektowe są czasem krytykowane. Najczęściej zwraca się uwagę na trzy główne problemy.
Traktowanie wzorców arbitralnie
Programiści z mniejszym doświadczeniem mogą podchodzić do wzorców projektowania zbyt sztywno. Problemem może być wdrażanie wzorców bez uwzględnienia konieczności elastycznego dopasowania.
Nadmierne wykorzystywanie wzorców
To także problem widoczny u mniej doświadczonych programistów. Poznając temat wzorców projektowych, mogą mieć tendencję do nadmiernego ich wykorzystywania nawet w sytuacjach, w których wystarczy mniej skomplikowany kod.
Wzorce projektowe tuszują problemy, a nie je rozwiązują
Czasami programista nie dopasuje dobrze języka do projektu i wtedy próbuje sobie radzić za pomocą wzorców projektowych, więc w tym wypadku zarzut polega na prowizoryczności takich działań.