Co je to adaptér vzor?
sobes.tech AI
Odpověď od AI
Vzor adaptéra (Adapter Pattern) je štrukturálny návrhový vzor, ktorý umožňuje spoluprácu tried s nekompatibilnými rozhraniami. Funguje ako obal, ktorý premieňa rozhranie jednej triedy na iné, očakávané klientom.
Použitie:
- Integrácia knižníc tretích strán s nekompatibilnými rozhraniami.
- Použitie existujúcich tried v nových systémoch bez ich modifikácie.
- Zabezpečenie interakcie medzi nezávisle vyvíjanými triedami.
Príklad implementácie (objektový adaptér):
Predstavme si, že existuje 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();
}
Adapter 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() {
// Transformácia volania novej metódy na starú
legacyService.oldRequest();
}
}
Klient môže používať LegacyService cez rozhranie NewService:
NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // Zavolá oldRequest() v LegacyService
Existuje aj varianta — triedový adaptér, ktorý využíva viacnásobnú dedičnosť (ak jazyk podporuje) alebo dedičnosť od adaptovanej triedy a implementáciu cieľového rozhrania. V Jave, kvôli absencii viacnásobnej dedičnosti, sa to realizuje cez dedičnosť od adaptovanej triedy a implementáciu adaptérskeho rozhrania, ale takýto prístup je menej flexibilný. Objektový adaptér je preferovaný, pretože umožňuje prispôsobenie podtried a vyhýba sa pevnej väzbe.
Výhody:
- Umožňuje opätovné použitie nekompatibilných tried.
- Zapuzdruje detaily transformácie rozhraní.
- Zvyšuje flexibilitu systému.
Nevýhody:
- Môže zvýšiť zložitosť pridaním novej triedy.
- Výkon sa môže mierne znížiť kvôli ďalšej vrstve abstrakcie.