Sobes.tech
Junior

Kas ir adaptera modelis?

sobes.tech AI

Atbilde no AI

Adaptera shablons (Adapter Pattern) ir struktūras dizaina shablons, kas ļauj nesaderīgiem klases ar dažādiem interfeisiem strādāt kopā. Tas darbojas kā apvalks, kas pārveido viena klases interfeisu citā, ko klients sagaida.

Pielietojums:

  • Trešo pušu bibliotēku integrācija ar nesaderīgiem interfeisiem.
  • Esošo klasu izmantošana jaunos sistēmās bez to modifikācijas.
  • Sadarbības nodrošināšana starp neatkarīgi izstrādātām klasēm.

Implementācijas piemērs (objektu adaptētājs):

Iedomāsimies, ka ir esoša klase LegacyService ar metodi oldRequest():

class LegacyService {
    public void oldRequest() {
        // vecais kods
    }
}

Un jauns interfeiss NewService ar metodi newRequest():

interface NewService {
    void newRequest();
}

Adapteris ServiceAdapter realizē NewService un satur atsauci uz LegacyService:

class ServiceAdapter implements NewService {
    private LegacyService legacyService;

    public ServiceAdapter(LegacyService legacyService) {
        this.legacyService = legacyService;
    }

    @Override
    public void newRequest() {
        // Jauna metodes izsaukuma pārveidošana vecajā
        legacyService.oldRequest();
    }
}

Klients var izmantot LegacyService caur NewService interfeisu:

NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // Izsauks `oldRequest()` `LegacyService`

Ir arī variācija — klases adaptētājs, kas izmanto daudzmantošanu (ja valoda to atbalsta) vai mantošanu no adaptētās klases un realizē mērķa interfeisu. Java, jo nav daudzmantošanas, tas tiek īstenots caur mantošanu no adaptētās klases un adaptētāja interfeisa realizāciju, bet šī pieeja ir mazāk elastīga. Objektu adaptētājs ir vēlams, jo tas ļauj pielāgot apakšklases un izvairīties no stingras saistības.

Priekšrocības:

  • Atļauj izmantot nesaderīgus klases kopā.
  • Slēpj interfeisa pārveidošanas detaļas.
  • Palielina sistēmas elastību.

Trūkumi:

  • Var palielināt sarežģītību, pievienojot jaunu klasi.
  • Veiktspēja var nedaudz samazināties, papildus abstrakcijas līmeņa dēļ.