Адаптер (Adapter)

Метафора

 

Представьте себе китайскую вилку и нашу розетку, воткнуть просто так без адаптера у вас не выйдет.

 

Назначение

 

Есть некоторые разрозненные классы, которые поддерживают требуемые данные и поведения, однако они не предоставляют необходимого интерфейса для взаимодействия с ними. Для этого Вам необходимо создать класс обёртку с нужным интерфейсом, который внутри себя будет инкапсулировать те самые разрозненные классы, и переадресовывать вызовы из нужного Вам интерфейса к ним.

 

Диаграмма

 

Адаптер

Адаптер

 

Client использует абстракцию Target с нужным ему интерфейсом, класс Adapter реализует этот интерфейс, а уже внутри себя производит перенаправление запроса к целевому объекту Adaptee. Данная диаграмма представляет адаптер уровня объектов, кроме этого может быть еще и адаптер уровня классов. В классическом виде такой адаптер реализуется через множественное наследование, но т.к. ABAP это не поддерживает, представим его через интерфейс:

 

Адаптер уровня классов

Адаптер уровня классов

 

Adapter в данном случае реализует интерфейс подходящий для клиента и благодаря наследованию поведение Adaptee, внутри себя делает перенаправление из одного метода в другой.

 

Пример

 

Адаптер уровня объектов:

Адаптер уровня классов: