Wzorce projektowe
Wzorce projektowe są przykładami konstrukcji architektonicznych służących do rozwiązania konkretnych problemów często pojawiających się w praktyce programistycznej.
Wzorce nie są konstrukcjami teoretycznymi, ale odzwierciedleniem dobrych praktyk projektowania kodu. Z założenia przedstawiają szkic (schemat) rozwiązania, który należy uszczegółowić i dostosować do konkretnego kontekstu. Wzorce są realizacją koncepcji ponownego użycia, ale w odniesieniu do idei, struktury, architektury, a nie konkretnego kodu.
Standard prezentacji wzorców ustalony został w pierwszej poświęconej wzorcom książce (Gamma et al. 95) i obejmuje następujące, kolejno prezentowane elementy:
- nazwa wzorca (powinna oddawać istotę wzorca)
- przeznaczenie – zwięzła charakterystyka motywacji i celu wzorca
- inne nazwy (wzorce mogą funkcjonować w różnych kontekstach i różnych wariantach przed oficjalną klasyfikacją
- uzasadnienie stosowania – ogólny opis problemu i jego rozwiązania za pomocą wzorca w postaci scenariusza
- stosowalność – przedstawienie różnych kontekstów użycia wzorca
- struktura – najczęściej w postaci diagramu UML
- uczestnicy – szczegółowy opis klas i obiektów uczestniczących w realizacji wzorca
- współpraca – prezentacja współdziałania uczestników w trakcie realizacji zobowiązań
- konsekwencje – rozmaite aspekty zastosowania wzorca, np. wpływ wzorca na elastyczność, wydajność, zarządzanie pamięcią, stopień złożoności kodu itp.
- implementacja – uwarunkowania, które należy uwzględnić przy kodowaniu wzorca
- znane zastosowania – konteksty, w których wzorzec był już stosowany w praktyce
- pokrewne wzorce – wzorce stosowane w podobnych, ale różnych, sytuacjach, wzorce o zbliżonej strukturze, wzorce współpracujące
W przykładowych wzorcach stosować będziemy uproszczony opis zawierający następujące elementy:
- nazwa wzorca
- opis sytuacji, w której stosujemy wzorzec (motywacja do jego stosowania, problem, który wzorzec rozwiązuje)
- opis wzorca w postaci struktury klas i obiektów, ich wzajemnych zależności i interakcji (najczęściej w postaci diagramów UML)
- opis uwarunkowań stosowania wzorca (wady i zalety, sposoby konkretnej implementacji, przykłady)
Wzorce dzielą się na trzy grupy:
- kreacyjne – służące do organizacji tworzenia obiektów klas
- strukturalne – wskazujące optymalną strukturę hierarchii klas
- czynnościowe – przedstawiające odpowiednią hierarchię klas i funkcjonowanie obiektów przy realizacji określonych czynności
Podane przykłady obejmują wzorce z wszystkich grup:
- kreacyjny – Fabryka Abstrakcyjna
- strukturalny – Most
- czynnościowe – Strategia, Iterator