Wzorce Projektowe

Czym są wzorce projektowe?

Wzorce projektowe to sprawdzone, wielokrotnie przetestowane rozwiązania typowych problemów, z jakimi można się spotkać podczas projektowania oprogramowania. Są to swoiste “przepisy” na to, jak organizować kod w sposób efektywny, czytelny i łatwy do rozbudowy. Wzorce projektowe nie są gotowymi fragmentami kodu, ale raczej schematami, które można zaadaptować w konkretnych sytuacjach.

Kategorie wzorców projektowych:

Te wzorce są związane z tworzeniem obiektów. Umożliwiają one oddzielenie procesu tworzenia obiektów od reszty systemu, co sprawia, że kod staje się bardziej elastyczny i łatwiejszy do modyfikacji.

  • Singleton: Zapewnia, że dana klasa ma tylko jedną instancję w systemie, i umożliwia globalny dostęp do tej instancji.
  • Fabryka (Factory Method): Definiuje interfejs do tworzenia obiektów, ale pozwala podklasom zdecydować, jakiego typu obiekt zostanie stworzony.
  • Abstrakcyjna Fabryka (Abstract Factory): Umożliwia tworzenie rodzin spokrewnionych obiektów bez określania ich konkretnych klas.
  • Budowniczy (Builder): Ułatwia tworzenie złożonych obiektów krok po kroku, zapewniając kontrolę nad procesem ich konstrukcji.
  • Prototyp (Prototype): Tworzy nowe obiekty poprzez kopiowanie istniejących obiektów (tzw. klonowanie).

Wzorce te dotyczą sposobu organizowania klas i obiektów w większe struktury. Ich celem jest uproszczenie relacji między obiektami, a także wspieranie ponownego wykorzystania kodu.

  • Adapter: Umożliwia współpracę dwóch niekompatybilnych interfejsów, “dopasowując” jeden interfejs do drugiego.
  • Fasada (Facade): Ukrywa złożoność systemu poprzez dostarczenie uproszczonego interfejsu, który klient może łatwo wykorzystać.
  • Dekorator (Decorator): Dynamicznie rozszerza funkcjonalność obiektów bez modyfikacji ich kodu poprzez “opakowywanie” ich w inne obiekty.
  • Most (Bridge): Oddziela abstrakcję od jej implementacji, co pozwala niezależnie zmieniać jedną i drugą.
  • Kompozyt (Composite): Pozwala traktować grupę obiektów w taki sam sposób, jak pojedynczy obiekt. Jest przydatny przy budowie hierarchii obiektów.
  • Proxy (Pełnomocnik): Zastępuje rzeczywisty obiekt, kontrolując dostęp do niego lub dodając dodatkowe funkcje, np. opóźnione tworzenie obiektu (lazy loading).

Wzorce te koncentrują się na komunikacji i interakcjach między obiektami. Ich celem jest uproszczenie współpracy między obiektami, określając, w jaki sposób przekazują dane lub wykonują operacje.

Odwiedzający (Visitor): Oddziela operacje wykonywane na obiektach od ich struktury, umożliwiając dodawanie nowych operacji bez modyfikowania klas obiektów.

Obserwator (Observer): Pozwala jednym obiektom (obserwatorom) być informowanym o zmianach stanu innych obiektów (obserwowanych).

Łańcuch odpowiedzialności (Chain of Responsibility): Umożliwia przekazywanie żądania przez serię obiektów, aż któryś z nich to żądanie obsłuży.

Strategia (Strategy): Umożliwia wybór algorytmu działania w czasie działania programu przez dostarczanie różnych implementacji danego interfejsu.

Pamiątka (Memento): Pozwala zapisywać i przywracać poprzednie stany obiektów bez ujawniania ich wewnętrznej struktury.

Stan (State): Pozwala obiektowi zmieniać swoje zachowanie w zależności od jego stanu wewnętrznego, co sprawia, że obiekt wygląda jakby zmieniał swoją klasę.

Komenda (Command): Zamienia żądania lub operacje w obiekty, co pozwala przekazywać je jako argumenty, opóźniać ich wykonanie, a także zapisywać historię działań.

Szablonowa metoda (Template Method): Definiuje szkielet algorytmu w metodzie bazowej, a poszczególne kroki są realizowane w podklasach.

Scroll to Top