Adapter (wzorzec projektowy)
Adapter (inne nazwy: Opakowanie, en. Wrapper) jest to jeden ze strukturalnych wzorców projektowych (zarówno klasowy jak i obiektowy), 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.
Zastosowanie
Wzorzec adaptera stosowany jest najczęściej w przypadku, gdy wykorzystanie istniejącej klasy jest niemożliwe ze względu na jej niekompatybilny interfejs. Drugim powodem użycia może być chęć stworzenia klasy, która będzie współpracowała z klasami o nieokreślonych interfejsach.
Struktura
W celu stworzenia adaptera klasowego wykorzystywane jest wielokrotne dziedziczenie. Klasa adaptera dziedziczy prywatnie interfejs klasy adaptowanej oraz publicznie interfejs klienta.
W przypadku adaptera obiektowego jest inaczej. Klasa adaptera dziedziczy interfejs klienta oraz zawiera w sobie klasę adaptowaną. Rozwiązanie takie umożliwia oddzielenie klasy klienta od klasy adaptowanej.
Adapter dwukierunkowy
Zadaniem adaptera dwukierunkowego jest adaptowanie interfejsów klienta oraz adaptowanego. Dzięki takiemu rozwiązaniu każda z klas może pełnić zarówno funkcję klienta jak i adaptowanego. Ten typ adaptera można zaimplementować tylko za pomocą wielokrotnego dziedziczenia.
Konsekwencje stosowania
Konsekwencje stosowania wzorca są rózne w zależności od tego z jakim typem mamy doczynienia. W przypadku typu klasowego możemy mówić o następujących konsekwencjach:
- brak możliwości adaptowania klasy wraz z jej podklasami
- możliwość przeładowania metod obiektu adaptowanego
Do konsekwencji stosowania adaptera obiektowego należą:
- możliwość adaptacji klasy wraz z jej podklasami (związane jest to z wykorzystaniem składania obiektów)
- możliwość dodawania nowej funkcjonalności
- brak możliwości przeładowania metod obiektu adaptowanego
W obu przypadkach należy liczyć się z narzutem na wydajność - tym większym, im większa jest niekompatybilność interfejsów.
Zobacz też
Bibliografia
- Inżynieria oprogramowania: Wzorce projektowe - wydanie II, WNT 2008, ISBN: 78-83-204-3472-9, str. 157-170