Sobes.tech
Junior

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.