Sobes.tech
Junior

Адаптер паттерні дегеніміз не?

sobes.tech AI

AI-дан жауап

Адаптер паттерні (Adapter Pattern) — құрылымдық жобалау паттерні, ол бір-бірімен үйлеспейтін интерфейстері бар сыныптардың бірге жұмыс істеуін қамтамасыз етеді. Ол — интерфейсті бір сыныптан екінші сыныпқа түрлендіретін орағыш ретінде әрекет етеді, оны клиент күтеді.

Қолданылуы:

  • Үйлеспейтін интерфейсі бар сыртқы кітапханаларды біріктіру.
  • Бар сыныптарды жаңа жүйелерде өзгеріссіз пайдалану.
  • Тәуелсіз әзірленген сыныптар арасында өзара әрекеттестікті қамтамасыз ету.

Реализация мысалы (объектілік адаптер):

Бар LegacyService сыныбы және оның oldRequest() әдісі бар деп елестетейік:

class LegacyService {
    public void oldRequest() {
        // ескі код
    }
}

Және жаңа интерфейс NewService және оның newRequest() әдісі:

interface NewService {
    void newRequest();
}

Адаптер ServiceAdapter NewService интерфейсін жүзеге асырады және LegacyService-ке сілтемені қамтиды:

class ServiceAdapter implements NewService {
    private LegacyService legacyService;

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

    @Override
    public void newRequest() {
        // Жаңа әдіс шақыруды ескі әдіске түрлендіру
        legacyService.oldRequest();
    }
}

Клиент LegacyService-ті NewService интерфейсі арқылы пайдалана алады:

NewService service = new ServiceAdapter(new LegacyService());
service.newRequest(); // oldRequest() шақырады

Сонымен қатар, — сыныптық адаптер бар, ол бірнеше мұрагерлікті (қолдау болса) немесе адаптируемый сыныптан мұрагерлік пен мақсатты интерфейсті жүзеге асыруды пайдаланады. Java-да бірнеше мұрагерліктің болмауы себебінен, ол адаптируемый сыныптан мұрагерлік пен адаптер интерфейсін жүзеге асыру арқылы жүзеге асырылады, бірақ бұл әдіс аз икемді. Объектілік адаптер мұндай жағдайда артықшылықты, себебі ол подклассыларды бейімдеуге және қатал байланыстан аулақ болуға мүмкіндік береді.

Артықшылықтары:

  • Үйлеспейтін сыныптарды біріктіруге мүмкіндік береді.
  • Интерфейстерді түрлендірудің егжей-тегжейін инкапсуляциялайды.
  • Жүйенің икемділігін арттырады.

Кемшіліктері:

  • Жаңа сынып қосу арқылы күрделілікті арттыра алады.
  • Қосымша абстракция деңгейі себебінен өнімділік аздап төмендеуі мүмкін.