Przydatne wzorce projektowe w C#

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 jestWzorzec 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ładowegoPrototype
Zrekonstruować obiekt na podstawie starszej jego wersji, zawierającej wyłącznie stan wewnętrzny. Memento

 Wzorce odpowiedzialności

Moim zadaniem jestWzorzec projektowy
Skupić całą odpowiedzialność w jednej instancji klasy Singleton
Oddzielić obiekt od znajomości obiektów od niego zależnychObserver
Skupić odpowiedzialność w jednej klasie, nadzorującej interakcję innych obiektów Mediator
Pozwolić obiektowi działać w imieniu innego obiektuProxy
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 obiektachFlyweight pattern

Wzorce interfejsów

Moim zadaniem jestWzorzec projektowy
Zadaptować istniejący interfejs klasy do postaci oczekiwanej przez klientaAdapter
Stworzyć prosty interfejs dla zestawu klasFacade
Zdefiniować interfejs uwzględniający zarówno pojedyńcze obiekty, jak i grupy obiektówComposite
Oddzielić operacje abstrakcyjne od ich implementacji w celu wprowadzania w nich niezależnych zmian.Bridge

Wzorce operacji

Moim zadaniem jestWzorzec 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 stanState
Hermetyzować operacje, powodując stworzenie zmiennych implementacjiStrategy
Hermetyzować wywołanie metody w obiekcieCommand
Dystrybuować operacje w taki sposób, że każda implementacja odnosi się do innego typu kompozycjiInterpreter

Wzorce rozszerzeń

Moim zadaniem jestWzorzec projektowy
Umożliwienie programistom dynamicznego tworzenia zachowaniaDecorator
Udostępnienie sposobu sekwencyjnego dostępu do elementów kolekcjiIterator
Umożliwienie programistom zdefiniowanie nowej operacji dla hierarchii bez konieczności zmiany klas zawartych w tej hierarchiVisitor

4 przemyślenia nt. „Przydatne wzorce projektowe w C#

  1. Fajnie przygotowana lista. Można byłyby z tego zrobić plakat do wydrukowania.
    PS. Masz maila literówkę przy pierwszym wzorcu.

Możliwość komentowania jest wyłączona.