Šta je obrazac adapter?
sobes.tech АИ
Одговор од АИ
Шаблон адаптер (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() у LegacyService
Постоји и варијанта — класа адаптер, која користи мултинаследство (ако језик подржава) или наследство од адаптиране класе и имплементацију целног интерфејса. У Јави, због недостатка мултинаследства, реализује се преко наследства од адаптиране класе и имплементације адаптерског интерфејса, али тај приступ је мање флексибилан. Објектни адаптер је пожељнији јер омогућава прилагођавање подкласа и избегава чврсту везу.
Предности:
- Омогућава поновну употребу некомпатибилних класа.
- Инкапсулира детаље претварања интерфејса.
- Повећава флексибилност система.
Недостаци:
- Може повећати сложеност додавањем нове класе.
- Перформанса може благо опасти због додатног нивоа апстракције.