Sobes.tech
Junior

Mis on adapteri muster?

sobes.tech AI

Vastus AI-lt

Adapteri muster (Adapter Pattern) on struktuuriline disainimuster, mis võimaldab koos töötada klassidel, millel on ühilduvad kasutajaliidesed. See toimib nagu kate, mis muudab ühe klassi kasutajaliidese teiseks, mida klient ootab.

Rakendused:

  • Kolmandate osapoolte teekide integreerimine, millel on sobimatud kasutajaliidesed.
  • Olemasolevate klasside kasutamine uutes süsteemides ilma nende muutmiseta.
  • Sõltumatult arendatud klasside vaheline koostöö.

Näide rakendamisest (objektipõhine adapter):

Oletame, et olemas on klass LegacyService koos meetodiga oldRequest():

class LegacyService {
    public void oldRequest() {
        // vana kood
    }
}

Ja uus kasutajaliides NewService koos meetodiga newRequest():

interface NewService {
    void newRequest();
}

Adapter ServiceAdapter rakendab NewService ja sisaldab viidet LegacyService-le:

class ServiceAdapter implements NewService {
    private LegacyService legacyService;

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

    @Override
    public void newRequest() {
        // Uue meetodi väljakutse muutmine vana meetodiks
        legacyService.oldRequest();
    }
}

Klient saab kasutada LegacyService-i läbi NewService liidese:

NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // Kutsub `oldRequest()` `LegacyService`-is

Samuti on olemas variatsioon — klassiline adapter, mis kasutab mitme päriluse (kui keel seda toetab) või pärib adaptiivklassist ning rakendab sihtliidest. Java puhul, kuna mitme pärilust ei toetata, teostatakse see pärimise ja adapterliidese rakendamise kaudu, kuid selline lähenemine on vähem paindlik. Objektiivne adapter on eelistatum, kuna see võimaldab alampärilaste kohandamist ja rangest sidemest hoidumist.

Eelised:

  • Võimaldab kasutada sobimatuid klasse koos.
  • Varjab kasutajaliidese muutmise üksikasju.
  • Suurendab süsteemi paindlikkust.

Miinused:

  • Võib suurendada keerukust, lisades uue klassi.
  • Tootlikkus võib veidi langeda täiendava abstraktsuskihi tõttu.