Шаблонът на адаптера в Java

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.