Čo je to adaptér vzor?
sobes.tech AI
Odpoveď od AI
Vzor adaptéra (Adapter Pattern) je štrukturálny vzor návrhu, ktorý umožňuje triedam s nekompatibilnými rozhraniami spolupracovať. Pôsobí ako obal, ktorý premieňa rozhranie jednej triedy na iné, očakávané klientom.
Použitie:
- Integrácia tretích knižníc s nekompatibilnými rozhraniami.
- Použitie existujúcich tried v nových systémoch bez ich modifikácie.
- Zabezpečenie interakcie medzi triedami vyvinutými nezávisle.
Príklad implementácie (objektový adaptér):
Predstavme si, že existuje existujúca trieda LegacyService s metódou oldRequest():
class LegacyService {
public void oldRequest() {
// starý kód
}
}
A nový rozhranie NewService s metódou newRequest():
interface NewService {
void newRequest();
}
Adaptér ServiceAdapter implementuje NewService a obsahuje odkaz na LegacyService:
class ServiceAdapter implements NewService {
private LegacyService legacyService;
public ServiceAdapter(LegacyService legacyService) {
this.legacyService = legacyService;
}
@Override
public void newRequest() {
// Premena volania novej metódy na starú
legacyService.oldRequest();
}
}
Klient môže použiť LegacyService cez rozhranie NewService:
NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // Zavolá oldRequest() v LegacyService
Existuje aj varianta — triedny adaptér, ktorý využíva viacnásobné dedičstvo (ak je podporované jazykom) alebo dedičstvo od adaptovanej triedy a implementáciu cieľového rozhrania. V Jave, kvôli absencii viacnásobného dedičstva, sa to realizuje cez dedičstvo od adaptovanej triedy a implementáciu adaptérskeho rozhrania, ale takýto prístup je menej flexibilný. Objektový adaptér je preferovanejší kvôli možnosti prispôsobenia podtried a vyhýbaniu sa pevnej väzbe.
Výhody:
- Umožňuje spoločné používanie nekompatibilných tried.
- Zapuzdruje detaily transformácie rozhraní.
- Zvyšuje flexibilitu systému.
Nevýhody:
- Môže zvýšiť zložitosť zavedením novej triedy.
- Výkon môže mierne klesnúť kvôli ďalšej vrstve abstrakcie.