Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

С нарастването на ориентираната към услуги архитектура (SOA) все повече организации използват услуги на трети страни за своите корпоративни системи. Тези компании трябва да са в крак с бързо променящата се бизнес среда, което може да означава изоставяне на услугите на един доставчик на услуги за друг.

В такива случаи съществуващата архитектура на бизнеса може да е несъвместима с тази на нов доставчик. Вместо да губи месеци в пренаписване на корпоративен код, за да стане съвместим с нов софтуер, бизнесът може да използва шаблона за проектиране на адаптера.

Какво представлява моделът на дизайна на адаптера?

Моделът на адаптера позволява на класове, които имат несъвместими интерфейси, да работят заедно. Той прави това, като преобразува интерфейса на съществуващ клас (или софтуер) в такъв, който клиент (или услуга) очаква. Има два типа адаптери: адаптери на обекти и адаптери на класове.

instagram viewer

Обектният адаптер използва композиция, за да обвие адаптирания с адаптера, като ефективно създава интерфейса, който клиентът очаква. Така че, ако клиентът очаква низ, адаптерът ще вземе цяло число (адаптираното) и ще му даде характеристиките на низ.

Диаграмата на класовете по-горе представлява адаптера на обекта. The клас адаптер прилага на целеви интерфейс, ефективно получаване на достъп до всички методи на интерфейса. След това се адаптира адаптиран и увива това адаптиран с целеви интерфейс методи.

Адаптерът на класа използва множествено наследяване, където класът на адаптера е подклас както на адаптирания, така и на целевия клас. Диаграмата на класа по-долу представлява адаптера на класа, който можете свободно да използвате в езици за програмиране, които поддържат множествено наследяване.

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

Това приложение ще внедри обектния адаптер. Това примерно приложение ще симулира финансова организация, преминаваща от използване и обработка на карти за плащане към кредитни карти. Тази организация първоначално използва следния интерфейс на таксуваща карта:

публиченинтерфейсChargeCard{
публиченневалиденмесечен баланс();
публиченневалиденlateFee();
публиченневалиденГодишна такса();
}

Популярен тип таксуваща карта, която системата на тази организация обработва, е картата със сливи:

публиченкласPlumCardинструментиChargeCard{
частенвътр номер на карта;
частен String customerName;
частендвойно баланс;

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

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

публиченневалиденsetCardNo(вътр номер на карта){
това.cardNo = cardNo;
}

публичен низ getCustomerName(){
връщане Потребителско име;
}

публиченневалиденsetCustomerName(низ име на клиент){
това.customerName = име на клиент;
}

публичендвойноgetBalance(){
връщане баланс;
}

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

@Override
публиченневалиденмесечен баланс(){
System.out.println("През януари " + това.customerName + "изхарчен" + това.салдо);
}

@Override
публиченневалиденlateFee(){
System.out.println(това.customerName + "месечната такса за закъснение е $80,00");
}

@Override
публиченневалиденГодишна такса(){
System.out.println(това.customerName + "годишната такса е $200,00");
}
}

Тази финансова институция преминава към кредитни карти и постепенно премахва картите за плащане, така че някои от клиентите им вече имат кредитни карти:

публиченинтерфейсКредитна карта{
публиченневалиденмесечно минимално плащане();
публиченневалиденинтерес();
публиченневалиденГодишна такса();
}

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

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

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

@Override
публиченневалиденмесечно минимално плащане(){
това.chargeCard.monthlyBalance();
}

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

@Override
публиченневалиденГодишна такса(){
това.chargeCard. Годишна такса();
}
}

Този адаптер за ChargeCard Java клас внедрява CreditCard Java интерфейс. Той адаптира ChargeCard (адаптираната карта), придавайки й характеристиките на кредитна карта. Например, системата ще обработи таксата за лихва по кредитна карта, която е таксата за закъснение на клиент на карта с таксуване, който все още не е конвертирал.

Предимства от използването на модела на адаптера

Основното предимство на използването на модела на адаптера е, че позволява на клиентите да използват нови услуги, библиотеки и функции, без да променят своя код. Това насърчава мащабируемостта на приложението.

Друго предимство е, че този модел е и гъвкав. Моделът на адаптера осигурява два метода за изпълнение: адаптери на обекти и адаптери на класове.