Что такое шаблон проектирования адаптера и как его использовать?

0
технологии 33.webp

Последнее обновление 08.02.2023 — Василий Иванов

Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

С появлением сервис-ориентированной архитектуры (SOA) все больше и больше организаций используют сторонние сервисы для своих корпоративных систем. Этим компаниям необходимо идти в ногу с быстро меняющейся бизнес-средой, что может означать отказ от услуг одного поставщика услуг в пользу другого.

В таких случаях существующая архитектура бизнеса может быть несовместима с архитектурой нового поставщика. Вместо того, чтобы тратить месяцы на переписывание корпоративного кода, чтобы сделать его совместимым с новым программным обеспечением, бизнес может использовать шаблон проектирования адаптера.

Что такое шаблон проектирования адаптера?

Шаблон адаптера позволяет классам с несовместимыми интерфейсами работать вместе. Он делает это путем преобразования интерфейса существующего класса (или программного обеспечения) в тот, который ожидает клиент (или служба). Существует два типа адаптеров: адаптеры объектов и адаптеры классов.

По теме:  Как установить таймер для группового снимка на вашем iPhone

Адаптер объекта использует композицию, чтобы обернуть адаптируемый объект адаптером, эффективно создавая интерфейс, который ожидает клиент. Таким образом, если клиент ожидает строку, адаптер возьмет целое число (адаптируемый объект) и присвоит ему характеристики строки.

Диаграмма классов выше представляет объектный адаптер. Класс адаптера реализует целевой интерфейс, фактически получая доступ ко всем методам интерфейса. Затем он адаптирует адаптируемый элемент и оборачивает этот адаптируемый объект методами целевого интерфейса.

Адаптер класса использует множественное наследование, где класс адаптера является подклассом как адаптируемого, так и целевого класса. На приведенной ниже диаграмме классов представлен адаптер класса, который вы можете свободно использовать в языках программирования, поддерживающих множественное наследование.

Реализация шаблона проектирования адаптера в Java

Это приложение реализует объектный адаптер. Этот образец приложения имитирует переход финансовой организации от использования и обработки платежных карт к кредитным картам. Первоначально эта организация использовала следующий интерфейс платежных карт:

 public interface ChargeCard {
  public void monthlyBalance();
  public void lateFee();
  public void Annualfee();
}

Популярным типом платежных карт, которые обрабатывает система этой организации, является сливовая карта:

 public class PlumCard implements ChargeCard {
  private int cardNo;
  private String customerName;
  private double balance;

  // primary constructor
  public PlumCard(int cardNo, String customerName, double balance) {
    this.cardNo = cardNo;
    this.customerName = customerName;
    this.balance = balance;
  }

  // getters and setters
  public int getCardNo() {
    return cardNo;
  }

  public void setCardNo(int cardNo) {
    this.cardNo = cardNo;
  }

  public String getCustomerName() {
    return customerName;
  }

  public void setCustomerName(String customerName) {
    this.customerName = customerName;
  }

  public double getBalance() {
    return balance;
  }

  public void setBalance(double balance) {
    this.balance = balance;
  }
   
  @Override
  public void monthlyBalance() {
    System.out.println("In January " + this.customerName + " spent " + this.balance);
  }

  @Override
  public void lateFee() {
    System.out.println(this.customerName + " monthly latefee is $80.00");
  }

  @Override
  public void Annualfee() {
    System.out.println(this.customerName + " annual fee is $200.00");
  }
}

Это финансовое учреждение переходит на кредитные карты и постепенно отказывается от платежных карт, поэтому у некоторых из их клиентов теперь есть кредитные карты:

 public interface CreditCard {
  public void monthlyMinPayment();
  public void interest();
  public void Annualfee();
}

Корпоративная система финансового учреждения в настоящее время обрабатывает только кредитные карты, поскольку в следующем году планируется прекратить использование платежных карт. Но большинство их клиентов по-прежнему используют платежные карты. Итак, инженеры решили, что лучше использовать адаптер до тех пор, пока все их клиенты не перейдут на кредитную карту.

 public class ChargeCardAdapter implements CreditCard {
  ChargeCard chargeCard;

  public ChargeCardAdapter(ChargeCard chargeCard) {
    this.chargeCard = chargeCard;
  }

  @Override
  public void monthlyMinPayment() {
    this.chargeCard.monthlyBalance();
  }

  @Override
  public void interest() {
    this.chargeCard.lateFee();
  }

  @Override
  public void Annualfee() {
    this.chargeCard.Annualfee();
  }
}

Этот класс Java ChargeCardAdapter реализует интерфейс Java CreditCard. Он адаптирует ChargeCard (адаптер), придавая ему характеристики кредитной карты. Например, система будет обрабатывать комиссию за проценты по кредитной карте, которая является комиссией за просрочку платежной карты клиента, который еще не конвертировался.

Преимущества использования шаблона адаптера

Основным преимуществом использования шаблона адаптера является то, что он позволяет клиентам использовать новые службы, библиотеки и функции без изменения их кода. Это способствует масштабируемости приложения.

Еще одним преимуществом является то, что этот шаблон также является гибким. Шаблон адаптера предоставляет два метода реализации: адаптеры объектов и адаптеры классов.