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.
kopiowanie (clone()) Prototyp