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(); // `LegacyService`-тегі `oldRequest()` шақырылады

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

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

  • Әр түрлі сыныптарды біріктіруге мүмкіндік береді.
  • Интерфейстердің түрлендіруінің бөлшектерін жасырады.
  • Жүйенің икемділігін арттырады.

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

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