Czym są wzorce projektowe?
Wzorce projektowe to typowe rozwiązania problemów z projektowaniem oprogramowania, które wciąż napotykasz podczas tworzenia aplikacji w świecie rzeczywistym. Wzorce dotyczą projektów wielokrotnego użytku i interakcji obiektów. Każdy z nich stanowi plan, który po odpowiednim dostosowaniu pomaga poradzić sobie z konkretnym problemem w projekcie twojego kodu.
Co składa się na wzorzec?
Większość wzorców posiada formalny opis, dzięki któremu każdy może odtworzyć ich ideę w różnych kontekstach. Opis zwykle dzieli się na takie sekcje:
- Cel pobieżnie opisuje zarówno problem, jak i rozwiązanie.
- Motywacja rozszerza opis problemu i rozwiązania jakie umożliwia dany wzorzec.
- Struktura klas ukazuje poszczególne części wzorca i jak są ze sobą powiązane.
- Przykład kodu w którymś z języków programowania co pomaga zrozumieć ideę wzorca.
Wzorce projektowe różnią się poziomem skomplikowania, szczegółowością oraz skalą, w jakiej można je zastosować. Ponadto można je podzielić na trzy kategorie według ich przeznaczenia. Wzorce 23 “Gang of Four” są ogólnie uważane za podstawę wszystkich innych wzorów. Są one podzielone na trzy grupy: kreacyjne, strukturalne i behawioralne.
Wzorce kreacyjne
Wprowadzają elastyczniejsze mechanizmy tworzenia obiektów i pozwalają na ponowne wykorzystanie istniejącego kodu. To źródło różnych mechanizmów tworzenia obiektów, zwiększających elastyczność i ułatwiających ponowne użycie kodu.
Abstract Factory – Tworzy instancję kilku rodzin klas
Builder – Oddziela konstrukcję obiektu od jego reprezentacji
Factory Method – Tworzy instancję kilku klas pochodnych
Prototyp – W pełni zainicjowana instancja do skopiowania lub sklonowania
Singleton – Klasa, której może istnieć tylko jedna instancja
Wzorce strukturalne
Wyjaśniają jak składać obiekty i klasy w większe struktury, zachowując przy tym elastyczność i efektywność struktur.
Adapter – Dopasuje interfajsy różnych klas
Bridge – Oddziela interfejs obiektu od jego implementacji
Composite – Struktura drzewiasta obiektów prostych i złożonych
Decorator – Dynamicznie dodajr obowiązki do obiektów
Facada – Pojedyncza klasa reprezentująca cały podsystem
Flyweight – Drobnoziarnista instancja używana do wydajnego udostępniania
Proxy – Obiekt reprezentujący inny obiekt
Wzorce behawioralne
Które zajmują się efektywną komunikacją i podziałem obowiązków pomiędzy obiektami. Dotyczą algorytmów i podziału zadań pomiędzy obiektami.
Chain of Resp – Sposób przekazywania żądania między łańcuchem obiektów
Command – Hermetyzuj żądanie polecenia jako obiekt
Interpreter – Sposób na włączenie elementów językowych do programu
Iterator – Sekwencyjny dostęp do elementów kolekcji
Mediator – Definiuje uproszczoną komunikację między klasami
Memento – Przechwytywanie i przywracanie stanu wewnętrznego obiektu
Observer – Sposób powiadamiania o zmianie kilku klas
State – Zmień zachowanie obiektu, gdy zmieni się jego stan
Strategy – Hermetyzuje algorytm wewnątrz klasy
Template Method – Odrocz dokładne kroki algorytmu do podklasy
Visitor – Definiuje nową operację dla klasy bez zmian
Wzorzec projektowy nie jest gotową implementacją rozwiązania danego problemu. Przypomina raczej szablon, który może być zastosowany w wielu różnych sytuacjach. Wzorce oparte są na praktycznych rozwiązaniach, które zostały zaimplementowane w wybranym języku obiektowym. Mogą przyspieszać proces projektowania aplikacji przez wykorzystanie wypróbowanych rozwiązań dla sformułowanego problemu.