Sobes.tech
Junior

Adapter naqshasi nima?

sobes.tech AI

AIdan javob

Adapter naqshili (Adapter Pattern) — bu tuzilma dizayn naqshidir, u mos kelmaydigan interfeysga ega bo'lgan sinflar birga ishlashiga imkon beradi. U, mijoz kutayotgan boshqa interfeysga sinf interfeysini o'zgartiradigan qopqoq sifatida ishlaydi.

Qo'llanilishi:

  • Uyg'un bo'lmagan interfeysga ega bo'lgan uchinchi tomon kutubxonalarini integratsiya qilish.
  • Mavjud sinflardan yangi tizimlarda foydalanish, ularni o'zgartirmasdan.
  • Mustaqil ravishda ishlab chiqilgan sinflar o'rtasida o'zaro ta'sirni ta'minlash.

Amaliyot misoli (obyekt adapteri):

Faraz qilaylik, LegacyService nomli va oldRequest() metodiga ega sinf mavjud:

class LegacyService {
    public void oldRequest() {
        // eski kod
    }
}

Yangi interfeys NewService va uning newRequest() metodi bilan:

interface NewService {
    void newRequest();
}

Adapter ServiceAdapter NewServiceni amalga oshiradi va LegacyServicega havola saqlaydi:

class ServiceAdapter implements NewService {
    private LegacyService legacyService;

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

    @Override
    public void newRequest() {
        // Yangi metod chaqiruvini eski metodga aylantirish
        legacyService.oldRequest();
    }
}

Mijoz LegacyServiceni NewService interfeysi orqali ishlatishi mumkin:

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

Shuningdek, sinf adapteri nomli variant ham mavjud; bu, til qo'llab-quvvatlagan taqdirda, ko'p meros olish yoki adaptatsiya qilinadigan sinfdan meros olish va maqsadli interfeysni amalga oshirishni o'z ichiga oladi. Java'da, ko'p meros olish imkoniyati bo'lmaganligi sababli, bu, adaptatsiya qilinadigan sinfdan meros olish va adapter interfeysini amalga oshirish orqali amalga oshiriladi, ammo bu yondashuv kamroq moslashuvchan. Ob'ekt adapteri, subklasslarni moslashtirish va qattiq bog'lanishni oldini olish imkonini beradi.

Afzalliklar:

  • Mos kelmaydigan sinflarning qayta ishlatilishini ta'minlaydi.
  • Interfeyslarni o'zgartirish tafsilotlarini inkapsulyatsiya qiladi.
  • Tizimning moslashuvchanligini oshiradi.

Kamchiliklar:

  • Yangi sinf qo'shish orqali murakkablikni oshirishi mumkin.
  • Qo'shimcha abstraktsiya darajasi tufayli ishlash tezligi biroz pasayishi mumkin.