– Cześć, Amigo! Dzisiaj opowiem Ci, czym dokładnie jest «adapter». Mam nadzieję, że po zapoznaniu się z tym tematem, lepiej zrozumiesz strumienie wejściowe/wyjściowe.
Wyobraź sobie, że Twój program używa dwóch frameworków napisanych przez innych programistów/firmy. Oba frameworki są bardzo dobre i wykorzystują zasady OOP: abstrakcję, polimorfizm i enkapsulację. Razem niemal całkowicie załatwiają one wymagania Twojego programu. Pozostaje Ci tylko do wykonania proste zadanie. Musisz przekazać obiekty stworzone przez jeden framework do drugiego. Jednak oba frameworki są zupełnie od siebie różne i „nie wiedzą o sobie nawzajem”, tzn. nie mają żadnych wspólnych klas. Musisz w jakiś sposób przekształcić obiekty jednego frameworku w obiekty drugiego.
To zadanie można pięknie rozwiązać, stosując technikę «adaptera» (wzorzec projektowy):
Kod Java | Opis |
---|---|
|
Odzwierciedla to wzorzec projektowy adapter.
Podstawową zasadą jest to, że klasa MyClass konwertuje (dostosowuje) jeden interfejs do drugiego. |
– Możesz podać bardziej szczegółowy przykład?
– OK. Powiedzmy, że każdy framework ma swój własny, unikalny interfejs „listy”. Wyglądałoby to mniej więcej tak:
Kod Java | Opis |
---|---|
|
Kod z pierwszego frameworku (Alpha)
AlphaList jest jednym z interfejsów, który pozwala na interakcję kodu frameworku z kodem, który korzysta z tego frameworku. |
|
AlphaListManager AlphaListManager jest klasą frameworku. Jego metoda createList tworzy obiekt AlphaList |
|
Kod z drugiego frameworku (Beta).
AlphaList jest jednym z interfejsów, który pozwala na interakcję kodu frameworku z kodem, który korzysta z tego frameworku. BetaSaveManager jest klasą frameworku. Jego metoda saveList zapisuje obiekt BetaList |
|
Klasa «Adapter» dokonuje konwersji interfejsu AlphaList na interfejs BetaList
Klasa ListAdapter implementuje interfejs BetaList z drugiego frameworku. Kiedy ktoś wywołuje te metody, kod klasy «przekazuje» te wywołania do zmiennej list, którą jest AlphaList z pierwszego frameworku. Obiekt AlphaList jest przekazywany do konstruktora ListAdapter Metoda setSize działa według następujących zasad: jeżeli konieczne jest zwiększenie rozmiaru listy, dodaje puste pozycje (null). Jeżeli zachodzi konieczność zmniejszenia rozmiaru listy, to usuwa pozycje na końcu. |
|
Przykład, jak można to wykorzystać |
– Najbardziej podobał mi się Twój ostatni przykład. Był bardzo treściwy i zrozumiały.
GO TO FULL VERSION