Adapter (wzorzec projektowy): Różnice pomiędzy wersjami
[wersja przejrzana] | [wersja przejrzana] |
m →Struktura: wikizacja |
m ort. |
||
Linia 1: | Linia 1: | ||
'''Adapter''' (inne nazwy: Opakowanie, [[język angielski|en]]. Wrapper) jest to jeden ze [[Wzorzec projektowy (informatyka)|strukturalnych wzorców |
'''Adapter''' (inne nazwy: Opakowanie, [[język angielski|en]]. Wrapper) jest to jeden ze [[Wzorzec projektowy (informatyka)|strukturalnych wzorców projektowych]] (zarówno klasowy jak i obiektowy), którego celem jest umożliwienie współpracy dwóm [[Klasa (programowanie obiektowe)|klasom]] o niekompatybilnych [[Interfejs klasy|interfejsach]]. Adapter przekształca interfejs jednej z klas na interfejs drugiej klasy. Innym zadaniem omawianego wzorca jest opakowanie istniejącego interfejsu w nowy. |
||
Wersja z 01:37, 28 lut 2009
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