Последнее обновление 08.02.2023 — Василий Иванов
Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.
С появлением сервис-ориентированной архитектуры (SOA) все больше и больше организаций используют сторонние сервисы для своих корпоративных систем. Этим компаниям необходимо идти в ногу с быстро меняющейся бизнес-средой, что может означать отказ от услуг одного поставщика услуг в пользу другого.
В таких случаях существующая архитектура бизнеса может быть несовместима с архитектурой нового поставщика. Вместо того, чтобы тратить месяцы на переписывание корпоративного кода, чтобы сделать его совместимым с новым программным обеспечением, бизнес может использовать шаблон проектирования адаптера.
Что такое шаблон проектирования адаптера?
Шаблон адаптера позволяет классам с несовместимыми интерфейсами работать вместе. Он делает это путем преобразования интерфейса существующего класса (или программного обеспечения) в тот, который ожидает клиент (или служба). Существует два типа адаптеров: адаптеры объектов и адаптеры классов.
Адаптер объекта использует композицию, чтобы обернуть адаптируемый объект адаптером, эффективно создавая интерфейс, который ожидает клиент. Таким образом, если клиент ожидает строку, адаптер возьмет целое число (адаптируемый объект) и присвоит ему характеристики строки.
Диаграмма классов выше представляет объектный адаптер. Класс адаптера реализует целевой интерфейс, фактически получая доступ ко всем методам интерфейса. Затем он адаптирует адаптируемый элемент и оборачивает этот адаптируемый объект методами целевого интерфейса.
Адаптер класса использует множественное наследование, где класс адаптера является подклассом как адаптируемого, так и целевого класса. На приведенной ниже диаграмме классов представлен адаптер класса, который вы можете свободно использовать в языках программирования, поддерживающих множественное наследование.
Реализация шаблона проектирования адаптера в 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 (адаптер), придавая ему характеристики кредитной карты. Например, система будет обрабатывать комиссию за проценты по кредитной карте, которая является комиссией за просрочку платежной карты клиента, который еще не конвертировался.
Преимущества использования шаблона адаптера
Основным преимуществом использования шаблона адаптера является то, что он позволяет клиентам использовать новые службы, библиотеки и функции без изменения их кода. Это способствует масштабируемости приложения.
Еще одним преимуществом является то, что этот шаблон также является гибким. Шаблон адаптера предоставляет два метода реализации: адаптеры объектов и адаптеры классов.