Design patterns

/Tag:Design patterns

Wzorce projektowe: Bridge

Wzorzec projektowy Bridge jest strukturalnym wzorcem projektowym, który pozwala oddzielić abstrakcję obiektu od jego implementacji przez co mogą być oddzielnie rozszerzane. Pozwala to wprowadzać oddzielnie zmiany do każdej z dwóch hierarchii klas. Działanie wzorca polega na tym, że abstrakcja definiuje ogólny wygląd obiektu, a jego działania są przekazywane do implementacji. Implementacja niejednokrotnie jest uzależniona od systemu zewnętrznego i może być dostarczona przez któryś z wzorców produkujących. Dla przykładu może istnieć abstrakcja Rysunek i mieć metodę rysuj(), która będzie przeniesiona do implementacji ponieważ inaczej się rysuje na papierze a inaczej na ekranie. […]

By | Luty 8th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Template method

Wzorzec projektowy Template method jest wzorcem z grupy wzorców operacyjnych. Definiuje on za pomocą abstrakcji szkielet algorytmu, który w klasach potomnych jest w pełni realizowany. Na początku tworzona jest kalsa zawierająca ogólne kroki algorytmu zapisane jako metody abstrakcyjne. Klasy potomne nadpisują te abstrakcyjne metody implementując rzeczywiste akcje. Dzięki takiemu podejściu szkielet algorytmu trzymany jest w jednym miejscu, ale jego mniejsze (bardziej specjalistyczne) kroki mogą być zmieniane w podklasach. Template Method jest wykorzystywany we wzorcach Strategia i Abstract Factory. […]

By | Luty 7th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Facade

Wzorzec projektowy Facade (Fasada) należy do grupy wzorców strukturalnych. Jego rolą jest uproszczenie złożonego interfejsu lub jego uporządkowanie. Czasami występuje potrzeba skorzystania z gotowego, niejednokrotnie rozbudowanego systemu albo biblioteki. Jednocześnie nie ma potrzeby wykorzystania całego dostępnego API lub to API jest nieprzejrzyste. Buduje się wtedy obiekty pośredniczące pomiędzy starym systemem, a systemem który z niego korzysta. […]

By | Luty 7th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Command

Command jest operacyjnym wzorcem projektowym, którego celem jest encapsulacja czynności do wykoniania i ich parametrów. W programach niektóre czynności mogą być wykonywane długo, np. odczytywanie rekordów z bazy danych. Klient, który wykonuje taką metodę na drugim obiekcie niekiedy musi czekać, aż wykonywanie tej metody się zakończy i dopiero wtedy może dalej wykonywać swój kod. Warto w takich sytuacjach skorzystać z wzorca Command. Wzorzec ten określa polecenie jako obiekt, który jest wysyłany od klienta do odbiorcy, co pozwala nam na takie funkcjonalności jak: kolejkowanie poleceń, kontrolowanie historii (nawet z operacją ‚undo’) i temu podobne. […]

By | Luty 6th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Decorator

Wzorzec Decorator jest wzorcem strukturalnym. Jego rolą jest nadawanie obiektowi nowych funkcjonalności ale jednocześnie zapobiec eksplozji klas, która mogłaby w takiej sytuacji wystąpić. Drugą zaletą dekoratorów jest to, że możemy zmieniać funkcjonalność dynamicznie w trakcie działania programu. Dekoratory implementują ten sam interfejs co klasa, której funkcjonalność mają rozszerzyć i przyjmuja oryginalny obiekt jako parametr konstruktora. Wszystkie metody są delegowane do obiektu ‚wyżej’ i dodatkowo wykonywane nowe funkcjonalności. Przykład: Zaprojektujemy system deserów, gdzie każdy z deserów będzie mógł być przystrojony jakimś dodatkiem jak bita śmietana czy wisionka. […]

By | Luty 4th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Prototype

Wzorzec projektowy Prototype jest konstrukcyjnym wzorcem projektowym, którego zadaniem jest unikanie powstawania nowych instancji danego obiektu. Prototype tworzy klony podanego obiektu zamiast tworzenia nowych. Jest to potrzebne gdy musimy uniknąć tworzenia w aplikacji klienckiej podklas obiektu budującego (tak jak to jest w przypadku Abstract Factory). Drugim przypadkiem kiedy Prototype jest wykorzystywany jest sytuacja, gdy potrzebujemy obiektu, którego utworzenie nowej instancji jest zbyt kosztowne. Aby zaimplementować ten wzorzec deklaruje się klasę bazową abstrakcyjną która implementuje interfejs Cloneable. Klient który chce powołać nowy obiekt wywołuje metode clone() na prototypie, albo metodę fabrykującą z parametrem określającym pożądaną docelową klasę pochodną. […]

By | Luty 3rd, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Builder

Wzorzec projektowy Builder jest wzorcem konstrukcyjnym. Jego celem jest hermetyzacja kodu odpowiedzialnego za tworzenie obiektów od kodu klienta. Od wzorców z rodziny fabryk różni go jeszcze to, że Builder potrafi budować obiekty wg różnych algorytmów krok po kroku – Fabryki budują obiekty o zbliżonych funkcjonalnościach w jednym etapie. Wzorzec Builder składa się: z interfejsu reprezentującego abstrakcyjnego budowniczego, klas go implementujących jako konkretni budowniczowie, Klasy Director, która zarządza procesem budowania, oraz produktem który ma zostać wyprodukowany. Produkt który chcemy produkować:

[…]

By | Luty 3rd, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Singleton

Singleton jest wzorcem konstrukcyjnym, który nie pomaga przy tworzeniu obiektów lecz wręcz odwrotnie – przeszkadza. Jego zadaniem jest tworzenie obiektu, który jest tylko w jednej instacji w całej aplikacji. Często bywa że w aplikacji potrzeba coś jedynego w swoim rodzaju, np. kolejka drukowania lub zarządzanie połączeniami z bazą danych. Do tych celów nadaje się wzorzec Singleton. Singleton posiada konstruktor prywatny co zapobiega przypadkowemu jego wywołaniu, referencję do obiektu otrzymujemy przez wywołanie statycznej metody getInstance(). Klasa wzorca singleton wygląda tak:

[…]

By | Luty 2nd, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce Projektowe: Observer

Wzorzec Observer jest wzorcem operacyjnym. Definiuje relację jeden do wielu między obiektami, gdzie obiekty obserwujące zostają powiadomione o zmianie stanu obiektu obserwowanego. Obiekty obserwujące nie muszą wiedzieć, że istnieją inne obiekty obserwujące to samo, oraz same mogą decydować czy chcą być powiadamiane o zmianach stanu czy też nie. Aby zrealizować takie zadanie wymagane jest utworzenie dwóch interfejsów: Obserwator i Obserwowany. Pierwszy ma zdefiniowaną metodę, która jest wykonywana gdy obiekt obserwowany zmieni stan. Interfejs obiektu obserwowanego musi posiadać trzy metody: getter i setter dla obserwatorów oraz metodę powiadamiającą wszystkich zarejestrowanych obserwatorów o zmianie stanu. […]

By | Luty 2nd, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Factory method

Wzorzec Factory method (Metoda fabrykująca) jest kolejnym wzorce konstrukcyjnym. Wzorzec ten wykorzystywany jest w sytuacjach, gdy potrzebujemy utworzyć obiekt z poszczególnej grupy ( połączonej wspólnym interfejsem). Dodatkowo potrzebujemy klasy, która zajęłaby się implementacją poszczzególnych metod interfejsu i metody w większości przypadków będą niezmienne dla więkoszości klas. Do uzyskania zamierzonego efektu klasa odpowiedzialna za tworzenie metod została utworzona jako abstrakcyjna. Zawarto w niej wszystkie metody obsługujące potrzebny obiekt, a metodę która tworzy obiekt przeniesiono poziom niżej do poszczególnych podklas tej klasy. Dla przykładu: posiadamy intefejs Napoje i klasy go implementujące: Kawa, Wino, Woda i Piwo. Czyli dokładnie ten sam model, który wykorzystaliśmy przy opisie wzorca Simple Factory. […]

By | Luty 2nd, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments