Wzorce kreacyjne

Transkrypt

Wzorce kreacyjne
Wzorce projektowe
dr inż. Marcin Pietroo
Wzorce projektowe
• Wzorzec projektowy (ang. design pattern) –
w inżynierii oprogramowania, rozwiązanie często
pojawiających się, powtarzalnych problemów
projektowych. Przedstawia powiązania i zależności
pomiędzy klasami oraz obiektami i ułatwia
tworzenie, modyfikację oraz pielęgnację
oprogramowania. Wzorce projektowe stosowane
są w projektach wykorzystujących programowanie
obiektowe.
Wzorce projektowe
Trzy kategorie:
- kreacyjne (creational),
- strukturalne (structural),
- czynnościowe (bahavioral),
Wzorce kreacyjne
– Budowniczy (obiektowy),
– Fabryka abstrakcyjna (obiektowy),
– Metoda wytwórcza (klasowy),
– Prototyp (obiektowy),
– Singleton (obiektowy).
Wzorce strukturalne
– Adapter (klasowy oraz obiektowy),
– Dekorator (obiektowy),
– Fasada (obiektowy),
– Kompozyt (obiektowy),
– Most (obiektowy),
– Pełnomocnik (obiektowy),
– Pyłek (obiektowy).
Wzorce czynnościowe
–
–
–
–
–
–
–
–
–
–
–
Interpreter (klasowy),
Iterator (obiektowy),
Łaocuch zobowiązao (obiektowy),
Mediator (obiektowy),
Metoda szablonowa (klasowy),
Obserwator (obiektowy),
Odwiedzający (obiektowy),
Pamiątka (obiektowy),
Polecenie (obiektowy),
Stan (obiektowy),
Strategia (obiektowy).
Wzorce projektowe
• Singleton - kreacyjny wzorzec projektowy,
którego celem jest ograniczenie możliwości
tworzenia obiektów danej klasy do jednej
instancji
• Singleton musi byd ostrożnie stosowany w
systemach wielowątkowych. Zażądanie instancji
klasy przez dwa wątki równocześnie może
doprowadzid do utworzenia dwóch niezależnych
instancji, dlatego metoda dostępowa powinna
byd wtedy zaimplementowana z
wykorzystaniem wzajemnego wykluczania.
Singleton
• Singleton implementuje się przez stworzenie klasy, która
posiada statyczną metodę, która najpierw sprawdza, czy istnieje już
instancja tej klasy, w razie potrzeby tworząc ją.
• Instancję przechowuje się w prywatnym lub chronionym, statycznym polu,
do którego dostęp ma tylko opisana wyżej metoda, która jest jedyną drogą
pozyskania instancji obiektu singletonu – aby uniemożliwid tworzenie
dodatkowych instancji, konstruktor klasy deklaruje się jako prywatny lub
chroniony.
Wzorce projektowe
Factory Method
wzorzec projektowy, którego celem jest
dostarczenie interfejsu do tworzenia obiektów
nieokreślonych jako powiązanych typów.
Abstract Factory
wzorzec projektowy, którego celem jest
dostarczenie interfejsu do tworzenia
różnych obiektów jednego typu (tej samej rodziny)
bez specyfikowania ich konkretnych klas.
Factory Method
• We wzorcu występują dwie ogólne klasy bądź interfejsy
definiujące pewien typ zasobów (Product) oraz sposób
ich tworzenia (Creator, metoda factoryMethod()).
• Wyprowadza się konkretne klasy zasobów
(ConcreteProduct) wraz z tworzącymi je klasami
wytwórczymi (ConcreteCreator), które dostarczają
odpowiednią implementację metody factoryMethod().
• Komponent pragnący tworzyd zasoby i operowad na
nich, korzysta z ogólnych
interfejsów Product oraz Creator, umożliwiając wybór
konkretnej implementacji w sposób dynamiczny
Factory Method
• Aplikacja wykorzystująca metody wytwórcze jest niezależna od konkretnych
implementacji zasobów oraz procesu ich tworzenia. Mogą byd one ustalane
dynamicznie w trakcie uruchomienia lub zmieniane podczas działania
aplikacji.
• Wzorzec hermetyzuje proces tworzenia obiektów, zamykając go za ściśle
zdefiniowanym interfejsem. Właściwośd ta jest wykorzystywana, gdy
tworzenie nowego obiektu jest złożoną operacją.
Abstract Factory
• Celem jest dostarczenie interfejsu do tworzenia
różnych obiektów jednego typu (tej samej
rodziny) bez specyfikowania ich konkretnych klas.
• Umożliwia jednemu obiektowi tworzenie różnych,
powiązanych ze sobą, reprezentacji podobiektów
określając ich typy podczas działania programu.
• Fabryka abstrakcyjna kładzie nacisk na tworzenie
produktów z konkretnej rodziny
Abstract Factory
• Jednym z plusów wykorzystania wzorca jest możliwośd
ukrycia szczegółów implementacyjnych klas
reprezentujących konkretny produkt - klient widzi tylko
interfejs. Ukryciu ulegają także nazwy tych klas, co nie
wymusza ich zapamiętywania i odizolowuje klienta od
problemu określenia do której klasy należy obiekt.
• Do zysków należy także możliwośd całkowitego ukrycia
implementacji obiektów przed klientem. Klient widzi tylko
interfejs i nie ma możliwości zajrzenia do kodu oraz to, że
wymuszana jest spójnośd produktów.
• Do minusów należy zaliczyd trudnośd rozszerzania rodziny
obiektów o nowe podobiekty. Wymusza to modyfikację
klasy fabryki abstrakcyjnej oraz wszystkich obiektów, które
są tworzone przez nią.
Abstract Factory
Builder
• kreacyjny wzorzec projektowy, którego celem jest rozdzielenie
sposobu tworzenia obiektów od ich reprezentacji
• proces tworzenia obiektu podzielony jest na kilka mniejszych
etapów a każdy z tych etapów może byd implementowany na wiele
sposobów.
• Zazwyczaj stosowany jest do konstrukcji obiektów złożonych,
których konfiguracja i inicjalizacja jest procesem wieloetapowym.
• Budowniczy różni się od wzorca fabryki abstrakcyjnej oraz
pozostałych wzorców kreacyjnych tym, że skupia się na sposobie
tworzenia obiektów reprezentujących produkty. Tworzy drobną
częśd skomplikowanego produktu za każdym swoim wywołaniem
jednocześnie kontrolując stan wykonanej pracy.
Builder
Builder
• Zaletami stosowania wzorca są: duża możliwośd
zróżnicowania wewnętrznych struktur klas, większa
możliwośd kontrolowania tego, w jaki sposób tworzony jest
obiekt (proces konstrukcyjny jest niezależny od elementów,
z których składa się tworzony obiekt) oraz duża
skalowalnośd (dodawanie nowych reprezentacji obiektów
jest uproszczone).
• Stosowanie wzorca zapobiega także tworzeniu
zduplikowanego kodu odpowiedzialnego za tworzenie
obiektów, gdyż proces tworzenia konkretnych elementów
obiektów zamknięty jest w poszczególnych procedurach.
• Wada to duża liczba obiektów reprezentujących konkretne
produkty.
Prototyp
• kopiowanie (clone())