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

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

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

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

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

instagram viewer

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

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

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

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

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

публичныйинтерфейсПлатежная карточка{
публичныйпустотамесячный баланс();
публичныйпустоташтраф за опоздание();
публичныйпустотаГодовая плата();
}

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

публичныйсортPlumCardреализуетПлатежная карточка{
частныйинт номер карты;
частный Строка имя_клиента;
частныйдвойной баланс;

// первичный конструктор
публичныйPlumCard(инт cardNo, String имя_клиента, двойной баланс){
этот.cardNo = номер карты;
этот.customerName = имя_клиента;
этот.баланс = баланс;
}

// геттеры и сеттеры
публичныйинтgetCardNo(){
возвращаться номер карты;
}

публичныйпустотаsetCardNo(инт карта№){
этот.cardNo = номер карты;
}

публичный Нить getCustomerName(){
возвращаться Имя Клиента;
}

публичныйпустотаsetCustomerName(строка имя_клиента){
этот.customerName = имя_клиента;
}

публичныйдвойнойполучитьбаланс(){
возвращаться баланс;
}

публичныйпустотаsetBalance(двойной баланс){
этот.баланс = баланс;
}

@Override
публичныйпустотамесячный баланс(){
Система.out.println("В январе " + этот.имя_клиента + " потраченный " + этот.баланс);
}

@Override
публичныйпустоташтраф за опоздание(){
Система.out.println(этот.имя_клиента + "Ежемесячная плата за опоздание составляет 80 долларов США");
}

@Override
публичныйпустотаГодовая плата(){
Система.out.println(этот.имя_клиента + "Годовая плата составляет $ 200,00");
}
}

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

публичныйинтерфейсКредитная карта{
публичныйпустотаежемесячныйМинПлатеж();
публичныйпустотаинтерес();
публичныйпустотаГодовая плата();
}

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

публичныйсортChargeCardАдаптерреализуетКредитная карта{
зарядная карта;

публичныйChargeCardАдаптер(ChargeCard ChargeCard){
этот.ChargeCard = зарядная карта;
}

@Override
публичныйпустотаежемесячныйМинПлатеж(){
этот.chargeCard.monthlyBalance();
}

@Override
публичныйпустотаинтерес(){
этот.chargeCard.lateFee();
}

@Override
публичныйпустотаГодовая плата(){
этот.платежная карточка. Годовая плата();
}
}

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

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

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

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