Sobes.tech
Junior

Č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.