Sobes.tech
Junior

Mi az az adapter minta?

sobes.tech MI

Válasz az MI-től

Az adapter minta (Adapter Pattern) egy strukturális tervezési minta, amely lehetővé teszi inkompatibilis interfészekkel rendelkező osztályok számára, hogy együttműködjenek. Egy burkolóként működik, amely egy osztály interfészét egy másikra alakítja, amit a kliens elvár.

Alkalmazások:

  • Harmadik fél könyvtárainak integrálása inkompatibilis interfészekkel.
  • Meglévő osztályok használata új rendszerekben anélkül, hogy módosítanánk őket.
  • Függetlenül fejlesztett osztályok közötti interakció biztosítása.

Implementációs példa (objektum adapter):

Tegyük fel, hogy van egy LegacyService osztály, amelynek van egy oldRequest() metódusa:

class LegacyService {
    public void oldRequest() {
        // régi kód
    }
}

És egy új interfész NewService a newRequest() metódussal:

interface NewService {
    void newRequest();
}

Az ServiceAdapter implementálja a NewService-t, és tartalmaz egy hivatkozást a LegacyService-re:

class ServiceAdapter implements NewService {
    private LegacyService legacyService;

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

    @Override
    public void newRequest() {
        // Az új metódus hívásának átalakítása a régié
        legacyService.oldRequest();
    }
}

A kliens a LegacyService-t a NewService interfészen keresztül használhatja:

NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // Az oldRequest() hívása

Szintén létezik egy változat — osztály adapter, amely több öröklődést (ha a nyelv támogatja) vagy az adaptálandó osztályból való öröklődést és a célinterfész implementálását használja. Java-ban, a több öröklődés hiánya miatt, ez az adaptálható osztályból való öröklődés és az adapter interfészének implementálása révén valósul meg, de ez a megközelítés kevésbé rugalmas. Az objektum adaptert előnyben részesítjük, mert lehetővé teszi az alosztályok adaptálását és elkerüli a merev kötődést.

Előnyök:

  • Lehetővé teszi inkompatibilis osztályok újrahasznosítását.
  • Encapsulálja az interfészek átalakításának részleteit.
  • Növeli a rendszer rugalmasságát.

Hátrányok:

  • Növelheti a komplexitást, új osztály hozzáadásával.
  • A teljesítmény kissé csökkenhet egy további absztrakciós szint miatt.