В этом кратком руководстве мы рассмотрим шаблон адаптера и его реализацию на Java.
Шаблон адаптера действует как соединитель между двумя несовместимыми интерфейсами, которые в противном случае не могут быть подключены напрямую. Адаптер оборачивает существующий класс новым интерфейсом, чтобы он стал совместимым с интерфейсом клиента.
Основной мотив использования этого шаблона заключается в преобразовании существующего интерфейса в другой интерфейс, который ожидает клиент. Обычно это реализуется после разработки приложения.
2.1. Пример шаблона адаптера
Рассмотрим сценарий, в котором есть приложение, разработанное в США, которое возвращает максимальную скорость автомобилей класса люкс в милях в час (миль/ч). Теперь нам нужно использовать то же приложение для нашего клиента в Великобритании, который хочет получить те же результаты, но в километрах в час (км/ч).
Чтобы решить эту проблему, мы создадим адаптер, который преобразует значения и даст нам желаемые результаты:
Во-первых, мы создадим оригинальный интерфейс, который должен возвращать скорость некоторых роскошных автомобилей в милях в час:
public interface Movable { // returns speed in MPH double getSpeed(); }
Теперь мы создадим одну конкретную реализацию этого интерфейса:
public class BugattiVeyron implements Movable { @Override public double getSpeed() { return 268; } }
Теперь мы создадим подвижный адаптер интерфейса адаптера, который будет основан на том же Подвижном
класс. Он может быть слегка изменен, чтобы дать разные результаты в разных сценариях:
public interface MovableAdapter { // returns speed in KM/H double getSpeed(); }
Реализация этого интерфейса будет состоять из частного метода преобразования миль|ч в КМ|ч()//, который будет использоваться для преобразования:
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 миль в час в 431 км/ч для данного конкретного случая.
2.2. Когда использовать шаблон адаптера
- Когда внешний компонент предоставляет увлекательную функциональность, которую мы хотели бы использовать повторно, но она несовместима с нашим текущим приложением. Можно разработать подходящий адаптер, чтобы сделать их совместимыми друг с другом
- Когда наше приложение несовместимо с интерфейсом, который ожидает наш клиент
- Когда мы хотим повторно использовать устаревший код в нашем приложении без внесения каких-либо изменений в исходный код
В этой статье мы рассмотрели шаблон проектирования адаптера в Java.
Полный исходный код для этого примера доступен на GitHub .
Оригинал: “https://dev.to/baeldung/the-adapter-pattern-in-java-4e6c”