Wzorce projektowe dr inż. Marcin Pietroo
Adapter - strukturalny wzorzec projektowy, którego celem jest umożliwienie współpracy dwóm klasom o niekompatybilnych interfejsach - adapter przekształca interfejs jednej z klas na interfejs drugiej klasy - innym zadaniem omawianego wzorca jest opakowanie istniejącego interfejsu w nowy
Adapter - przykład
Adapter Wykorzystywane mechanizmy do realizacji adaptera: - kompozycja (w zależności od sposobu realizacji wzorca) - refleksja (w zależności od sposobu implementacji) - bloki instrukcji warunkowych (w adapter i w klasie będącej głównym interfejsem)
Adapter Istnieją dwa warianty wzorca Adapter: klasowy (wykorzystywany jest mechanizm wielokrotnego dziedziczenia, adapter dziedziczy z interfejsu klienta i klasy adaptowanej) obiektowy (jak na przykładzie, jednokrotne dziedziczenie i kompozycja)
Adapter Adapter klasowy: brak możliwości adaptowania klasy wraz z jej podklasami, możliwośd przeładowania metod obiektu adaptowanego. Adapter obiektowy: możliwośd adaptacji klasy wraz z jej podklasami, możliwośd dodawania nowej funkcjonalności, brak możliwości przeładowania metod obiektu adaptowanego. Uwaga: spadek wydajności w zależności od skomplikowania procesu adaptacji
Decorator Wzorzec dekoratora polega na opakowaniu oryginalnej klasy w nową klasę "dekorującą". Zwykle przekazuje się oryginalny obiekt jako parametr konstruktora dekoratora, metody dekoratora wywołują metody oryginalnego obiektu i dodatkowo implementują nową funkcję. Dekoratory są alternatywą dla dziedziczenia. Dziedziczenie rozszerza zachowanie klasy w trakcie kompilacji, w przeciwieostwie do dekoratorów, które rozszerzają klasy w czasie działania programu.
Decorator
Decorator Zapewnia większą elastycznośd niż statyczne dziedziczenie. Pozwala uniknąd tworzenia przeładowanych funkcjami klas na wysokich poziomach hierarchii. Powstawanie wielu małych obiektów. Zastosowanie np. w pakiecie java.io
Bridge Strukturalny wzorzec projektowy, który pozwala oddzielid abstrakcję obiektu od jego implementacji. odseparowanie implementacji od interfejsu, poprawienie możliwości rozbudowy klas, zarówno implementacji, jak i interfejsu (m.in. przez dziedziczenie), ukrywanie implementacji od klienta, co umożliwia zmianę implementacji bez zmian interfejsu.
Bridge
Facade Służy do ujednolicenia dostępu do złożonego systemu poprzez wystawienie uproszczonego, uporządkowanego interfejsu programistycznego.
Facade
Facade Wzorzec wyróżnia następujące elementy: złożony system do systemu upraszczamy dostęp fasada klasa posiadająca referencje do elementów systemu z metodami do wykonywania najczęściej potrzebnych zadao klient dowolny kod zainteresowany wykorzystaniem złożonego systemu. Klient komunikuje się z systemem poprzez fasadę, która w jego imieniu wykonuje niezbędne operacje na złożonym systemie. To, czy klient posiada także bezpośredni dostęp do systemu, zależy od programisty implementującego wzorzec.
Facade zmniejszenie liczby zależności między klientem a złożonym systemem wprowadzenie podziału aplikacji na warstwy, który ułatwia niezależny rozwój klienta i złożonego systemu, możliwośd zablokowania klientowi dostępu od pewnych obszarów złożonego systemu, jeśli jest to konieczne, kod klienta wykorzystującego fasadę jest czytelniejszy i łatwiejszy w zrozumieniu
Proxy Istnieją cztery rodzaje tego wzorca, które jednocześnie definiują sytuacje, w których może zostad użyty: wirtualny przechowuje obiekty, których utworzenie jest kosztowne; tworzy je na żądanie ochraniający kontroluje dostęp do obiektu sprawdzając, czy obiekt wywołujący ma odpowiednie prawa do obiektu wywoływanego zdalny czasami nazywany ambasadorem; reprezentuje obiekty znajdujące się w innej przestrzeni adresowej sprytne odwołanie czasami nazywany sprytnym (inteligentnym) wskaźnikiem; pozwala na wykonanie dodatkowych akcji podczas dostępu do obiektu, takich jak: zliczanie referencji do obiektu czy ładowanie obiektu do pamięci
Proxy Strukturalny wzorzec projektowy, którego celem jest utworzenie obiektu zastępującego inny obiekt. Stosowany jest w celu kontrolowanego tworzenia na żądanie kosztownych obiektów oraz kontroli dostępu do nich (np. Hibernate, oprogramowanie operujące nad dużymi zbiorami danych, praca z obiektami z ochroną dostępu itd.).