1. Общ преглед
В този бърз урок ще разгледаме модела на адаптера и неговото изпълнение на Java.
2. Шаблон на адаптера
Шаблонът на адаптера действа като съединител между два несъвместими интерфейса, които иначе не могат да бъдат свързани директно. Адаптерът обгръща съществуващ клас с нов интерфейс, така че да стане съвместим с клиентския интерфейс.
Основният мотив за използването на този модел е да конвертирате съществуващ интерфейс в друг интерфейс, който клиентът очаква. Обикновено се прилага, след като приложението е проектирано.
2.1. Пример за модел на адаптер
Помислете за сценарий, при който има разработено в САЩ приложение, което връща максималната скорост на луксозните автомобили в мили в час (MPH). Сега трябва да използваме същото приложение за нашия клиент във Великобритания, което иска същите резултати, но в километри в час (км / ч).
За да се справим с този проблем, ще създадем адаптер, който ще преобразува стойностите и ще ни даде желаните резултати:

Първо, ще създадем оригиналния интерфейс Movable, който трябва да върне скоростта на някои луксозни автомобили в мили в час:
public interface Movable { // returns speed in MPH double getSpeed(); }
Сега ще създадем една конкретна реализация на този интерфейс:
public class BugattiVeyron implements Movable { @Override public double getSpeed() { return 268; } }
Сега ще създадем интерфейс на адаптер MovableAdapter, който ще се основава на същия клас Movable . Той може да бъде леко модифициран, за да даде различни резултати в различни сценарии:
public interface MovableAdapter { // returns speed in KM/H double getSpeed(); }
Внедряването на този интерфейс ще се състои от частен метод convertMPHtoKMPH (), който ще се използва за преобразуването:
public class MovableAdapterImpl implements MovableAdapter { private Movable luxuryCars; // standard constructors @Override public double getSpeed() { return convertMPHtoKMPH(luxuryCars.getSpeed()); } private double convertMPHtoKMPH(double mph) { return mph * 1.60934; } }
Сега ще използваме само методите, дефинирани в нашия адаптер, и ще получим преобразуваните скорости. В този случай ще бъде вярно следното твърдение:
@Test public void whenConvertingMPHToKMPH_thenSuccessfullyConverted() { Movable bugattiVeyron = new BugattiVeyron(); MovableAdapter bugattiVeyronAdapter = new MovableAdapterImpl(bugattiVeyron); assertEquals(bugattiVeyronAdapter.getSpeed(), 431.30312, 0.00001); }
Както можем да забележим тук, нашият адаптер преобразува 268 mph в 431 km / h за този конкретен случай.
2.2. Кога да се използва модел на адаптер
- Когато външен компонент предоставя завладяваща функционалност, която бихме искали да използваме повторно, но е несъвместима с текущото ни приложение . Може да се разработи подходящ адаптер, който да ги направи съвместими помежду си
- Когато нашето приложение не е съвместимо с интерфейса, който клиентът ни очаква
- Когато искаме да използваме повторно наследения код в нашето приложение, без да правим никакви промени в оригиналния код
3. Заключение
В тази статия разгледахме модела на дизайна на адаптера в Java.
Пълният изходен код за този пример е достъпен в GitHub.