Gdy przychodzi czas na stworzenie aplikacji to najpierw staram się przemyśleć co ona ma robić i co z czym się łączy. Gdy obraz jest już w miarę wyraźny to zanim zacznę kodować jakieś prototypy i abstrakcje, przeglądam poniższą listę wzorców projektowych.
Są ku temu dwa powody.
- Po pierwsze sprawdzam czy do mojego rozwiązania można dopasować jakieś wzorzec . Nie znam na pamięć wszystkich wzorców a czasem te mniej popularne (o których się normalnie nie pamięta) się przydają.
- Po drugie robię to aby trochę się zainspirować jakimiś rozwiązaniami (wzorcami), które w toku ewolucji mogą przynieść pozytywne efekty.
Lista wzorców dzieli się na 2 pola. Jego opis, który ma być pytaniem o zadanie do wykonania oraz nazwę wzorca wraz z linkiem do wiki (en lub pl). Opis nie zawsze jest łatwy do zrozumienia na szybko ale dzięki temu jego definicja jest szersza (bardziej dokładna) i zmusza do zatrzymania się i głębokiego przemyślenia.
Wzorce konstrukcyjne
Moim zadaniem jest | Wzorzec projektowy |
---|---|
Stopniowo zbierać informacje o obiekcie przed przystąpieniem do jego konstrukcji. | Builder |
Zwolnić klienta z obowiązku "znajomości" konkretnej klasy, której instancja ma być stworzona. | Factory Method |
Stworzyć rodzinę obiektów posiadających określoną cechę wspólną. | Abstract Factory |
Stworzyć obiekt na podstawie obiektu przykładowego | Prototype |
Zrekonstruować obiekt na podstawie starszej jego wersji, zawierającej wyłącznie stan wewnętrzny. | Memento |
Wzorce odpowiedzialności
Moim zadaniem jest | Wzorzec projektowy |
---|---|
Skupić całą odpowiedzialność w jednej instancji klasy | Singleton |
Oddzielić obiekt od znajomości obiektów od niego zależnych | Observer |
Skupić odpowiedzialność w jednej klasie, nadzorującej interakcję innych obiektów | Mediator |
Pozwolić obiektowi działać w imieniu innego obiektu | Proxy |
Umożliwić przekazywanie żądania na coraz wyższe poziomy aż do znalezienia obiektu, który je obsłuży. | Chain-of-responsibility |
Skupić odpowiedzialność w drobnych, współużytkowanych obiektach | Flyweight pattern |
Wzorce interfejsów
Moim zadaniem jest | Wzorzec projektowy |
---|---|
Zadaptować istniejący interfejs klasy do postaci oczekiwanej przez klienta | Adapter |
Stworzyć prosty interfejs dla zestawu klas | Facade |
Zdefiniować interfejs uwzględniający zarówno pojedyńcze obiekty, jak i grupy obiektów | Composite |
Oddzielić operacje abstrakcyjne od ich implementacji w celu wprowadzania w nich niezależnych zmian. | Bridge |
Wzorce operacji
Moim zadaniem jest | Wzorzec projektowy |
---|---|
Zaimplementować (w postaci metody) algorytm i "opóźnić" kilka kroków wykonania algorytmu w taki sposób, aby klasy podrzędne mogły je ponownie zdefiniować. | Template method |
Dystrybuować operacje w taki sposób, że każda klasa reprezentuje różny stan | State |
Hermetyzować operacje, powodując stworzenie zmiennych implementacji | Strategy |
Hermetyzować wywołanie metody w obiekcie | Command |
Dystrybuować operacje w taki sposób, że każda implementacja odnosi się do innego typu kompozycji | Interpreter |
Wzorce rozszerzeń
Moim zadaniem jest | Wzorzec projektowy |
---|---|
Umożliwienie programistom dynamicznego tworzenia zachowania | Decorator |
Udostępnienie sposobu sekwencyjnego dostępu do elementów kolekcji | Iterator |
Umożliwienie programistom zdefiniowanie nowej operacji dla hierarchii bez konieczności zmiany klas zawartych w tej hierarchi | Visitor |
Nie poprawiłeś
Aha, już znalazłem. Dzięki za pomoc.
Fajnie przygotowana lista. Można byłyby z tego zrobić plakat do wydrukowania.
PS. Masz maila literówkę przy pierwszym wzorcu.
Dzieki za info. Poprawilem.