Адаптер үлгүсү эмнедир?
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да, көп мурас колдоо жоктугуна байланыштуу, бул адаптацияланган класс менен мурас алуу жана адаптер интерфейсин ишке ашыруу аркылуу ишке ашырылат, бирок мындай ыкма азыраак ийкемдүү. Объекттик адаптер көбүрөөк артыкчылыкка ээ, анткени ал подклассаларды адаптациялоого жана катуу байланыштан качууга мүмкүндүк берет.
Артыкчылыктары:
- Бир нече класстардын шайкеш келбегенин бириктирүүгө мүмкүндүк берет.
- Интерфейстердин өзгөрүшүнүн деталдарын каптайт.
- Жүйөнүн ийкемдүүлүгүн жогорулатат.
Кемчиликтери:
- Жаңы класс кошуу менен татаалдыгын арттыра алат.
- Өнүмдүүлүк аздап төмөндөйт, кошумча абстракция деңгээлинин натыйжасында.