Adapter (wzorzec projektowy)

Zobacz też: adapter.

Adapter (także: opakowanie, ang. wrapper) – 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[1]. Innym zadaniem omawianego wzorca jest opakowanie istniejącego interfejsu w nowy[2].

Problem

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[3].

Struktura

Diagram klas wzorca Adapter (wariant klasowy)
Diagram klas wzorca Adapter (wariant obiektowy)

Istnieją dwa warianty wzorca Adapter:

  • klasowy,
  • obiektowy.

Różnią się one nieznacznie budową oraz właściwościami. Do stworzenia adaptera klasowego wykorzystywane jest wielokrotne dziedziczenie. Klasa adaptera dziedziczy prywatnie po klasie adaptowanej oraz publicznie implementuje interfejs klienta[1]. W przypadku tego adaptera wywołanie funkcji jest przekierowywane do bazowej klasy adaptowanej[4].

W przypadku adaptera obiektowego klasa adaptera dziedziczy interfejs, którym posługuje się klient oraz zawiera w sobie klasę adaptowaną. Rozwiązanie takie umożliwia oddzielenie klasy klienta od klasy adaptowanej[1]. Komplikuje to proces przekazywania żądania: klient wysyła je do adaptera, wywołując jedną z jego metod. Następnie adapter konwertuje wywołanie na jedno bądź kilka wywołań i kieruje je do obiektu/obiektów adaptowanych. Te przekazują wyniki działania bezpośrednio do klienta[1][4].

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[4].

Konsekwencje stosowania

Zobacz publikację
Przykłady zastosowania wzorca Adapter w Wikibooks

Konsekwencje stosowania wzorca są różne w zależności od tego, z jakim typem mamy do czynienia. W przypadku typu klasowego są to:

  • 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 wydajnościowym — tym większym, im większa jest niekompatybilność interfejsów.

Zobacz też

  • most
  • dekorator
  • pełnomocnik

Przypisy

  1. a b c d Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Inżynieria oprogramowania: Wzorce projektowe (Wyd. II). Warszawa: Wydawnictwo Naukowo-Techniczne, 2008, s. 157-170. ISBN 978-83-204-3472-9.
  2. Opis wzorca na stronie SourceMaking. [dostęp 2009-03-06]. (ang.).
  3. Opis wzorca na stronie NetObjectives. [dostęp 2009-03-07]. [zarchiwizowane z tego adresu (2011-03-09)]. (ang.).
  4. a b c Sneha Prashant: Informacje na temat wzorca dwukierunkowego. 2008-08-28. [dostęp 2009-03-06]. (ang.).

Bibliografia

  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku. Helion, 2010, s. 141-151. ISBN 978-83-246-2662-5.

Linki zewnętrzne

Zobacz multimedia związane z tematem: Adapter (wzorzec projektowy)
  • Szczegółowy opis wzorca wraz z przykładami
  • Informacje o wzorcu na wiki c2.com
  • p
  • d
  • e
Wzorce projektowe według książki Design patterns autorstwa Gangu Czterech
Wzorce kreacyjne
  • Budowniczy
  • Fabryka abstrakcyjna
  • Metoda wytwórcza
  • Prototyp
  • Singleton
Wzorce strukturalne
  • Adapter
  • Dekorator
  • Fasada
  • Kompozyt
  • Most
  • Pełnomocnik
  • Pyłek
Wzorce czynnościowe
  • Interpreter
  • Iterator
  • Łańcuch zobowiązań
  • Mediator
  • Metoda szablonowa
  • Obserwator
  • Odwiedzający
  • Pamiątka
  • Polecenie
  • Stan
  • Strategia