A szolgáltatás-orientált architektúra (SOA) térnyerésével egyre több szervezet használ külső felektől származó szolgáltatásokat vállalati rendszereihez. Ezeknek a cégeknek lépést kell tartaniuk a gyorsan változó üzleti környezettel, ami azt is jelentheti, hogy az egyik szolgáltató szolgáltatásait a másikért kell átadni.
Ilyen esetekben előfordulhat, hogy egy vállalkozás meglévő architektúrája nem kompatibilis egy új szolgáltatóéval. Ahelyett, hogy hónapokat vesztegetne a vállalati kód újraírásával, hogy kompatibilis legyen az új szoftverekkel, a vállalkozások használhatják az adapter tervezési mintáját.
Mi az adapter tervezési mintája?
Az illesztőminta lehetővé teszi az inkompatibilis interfésszel rendelkező osztályok együttműködését. Ezt úgy teszi, hogy egy meglévő osztály (vagy szoftver) interfészét olyanná alakítja, amelyet az ügyfél (vagy szolgáltatás) elvár. Kétféle adapter létezik: objektum- és osztályadapter.
Az objektum-adapter a kompozíciót használja az alkalmazkodó és az adapter egymáshoz illesztésére, hatékonyan létrehozva az ügyfél által elvárt felületet. Tehát, ha az ügyfél egy karakterláncot vár, az adapter egy egész számot vesz fel (az adaptált), és megadja neki a karakterlánc jellemzőit.
A fenti osztálydiagram az objektum adaptert ábrázolja. A adapter osztály megvalósítja a célfelület, hatékonyan hozzáférhet az interfész összes metódusához. Aztán alkalmazkodik egy alkalmazkodó és becsomagolja azt alkalmazkodó a... val célfelület mód.
Az osztályadapter többszörös öröklődést használ, ahol az illesztőosztály az adaptált és a célosztály alosztálya is. Az alábbi osztálydiagram az osztályadaptert ábrázolja, amelyet szabadon használhat a többszörös öröklődést támogató programozási nyelvekben.
Az Adapter tervezési minta megvalósítása Java nyelven
Ez az alkalmazás megvalósítja az objektum adaptert. Ez a példaalkalmazás egy pénzügyi szervezetet szimulál, amely áttér a terhelési kártyák használatáról és feldolgozásáról a hitelkártyákra. Ez a szervezet eredetileg a következő fizetőkártya felületet használta:
nyilvánosfelületFeltöltő kártya{
nyilvánosüreshavi egyenleg();
nyilvánosüreskésedelmi díj();
nyilvánosüresÉves díj();
}
A szervezet által feldolgozott fizetőkártya egyik népszerű típusa a szilvakártya:
nyilvánososztályPlumCardmegvalósítjaFeltöltő kártya{
magánint igazolvány száma;
magán String customerName;
magánkettős egyensúly;// elsődleges konstruktor
nyilvánosPlumCard(int cardNo, String customerName, kettős egyensúly){
ez.cardNo = kártyaszám;
ez.customerName = ügyfélnév;
ez.balance = egyensúly;
}
// getterek és szetterek
nyilvánosintgetCardNo(){
Visszatérés igazolvány száma;
}
nyilvánosüressetCardNo(int igazolvány száma){
ez.cardNo = kártyaszám;
}
nyilvános Húr getCustomerName(){
Visszatérés Ügyfél neve;
}
nyilvánosüressetCustomerName(karakterlánc customerName){
ez.customerName = ügyfélnév;
}
nyilvánoskettősgetBalance(){
Visszatérés egyensúly;
}
nyilvánosüressetBalance(kettős egyensúly){
ez.balance = egyensúly;
}
@Felülbírálás
nyilvánosüreshavi egyenleg(){
System.out.println("Januárban " + ez.customerName + " költött " + ez.egyensúly);
}
@Felülbírálás
nyilvánosüreskésedelmi díj(){
System.out.println(ez.customerName + "A havi késedelmi díj 80,00 dollár");
}
@Felülbírálás
nyilvánosüresÉves díj(){
System.out.println(ez.customerName + "Az éves díj $200.00");
}
}
Ez a pénzintézet áttér a hitelkártyákra, és fokozatosan megszünteti a hitelkártyákat, így néhány ügyfele már rendelkezik hitelkártyával:
nyilvánosfelületHitelkártya{
nyilvánosüreshaviMinPayment();
nyilvánosüresérdeklődés();
nyilvánosüresÉves díj();
}
A pénzintézeti vállalati rendszer már csak hitelkártyákat dolgoz fel, mivel a következő évben szeretné megszüntetni a fizetőkártyák használatát. De ügyfeleik többsége továbbra is fizetőkártyát használ. Ezért a mérnökök úgy döntöttek, hogy az a legjobb, ha egy adaptert alkalmaznak mindaddig, amíg minden ügyfele át nem vált hitelkártyára.
nyilvánososztályChargeCardAdaptermegvalósítjaHitelkártya{
ChargeCard chargeCard;nyilvánosChargeCardAdapter(ChargeCard chargeCard){
ez.chargeCard = chargeCard;
}@Felülbírálás
nyilvánosüreshaviMinPayment(){
ez.chargeCard.monthlyBalance();
}@Felülbírálás
nyilvánosüresérdeklődés(){
ez.chargeCard.lateFee();
}
@Felülbírálás
nyilvánosüresÉves díj(){
ez.feltöltő kártya. Éves díj();
}
}
Ez a ChargeCardAdapter Java osztály megvalósítja a Hitelkártyát Java interfész. Átalakítja a ChargeCard-ot (az adapteót), így a hitelkártya jellemzőit adja. Például a rendszer feldolgozza a hitelkártya kamatdíját, ami a még nem konvertált fizetőkártyás ügyfél késedelmi díja.
Az adapterminta használatának előnyei
Az illesztőminta használatának fő előnye, hogy lehetővé teszi az ügyfelek számára, hogy új szolgáltatásokat, könyvtárakat és szolgáltatásokat használjanak a kód megváltoztatása nélkül. Ez elősegíti az alkalmazások méretezhetőségét.
További előnye, hogy ez a minta rugalmas is. Az illesztőminta két megvalósítási módot biztosít: objektum- és osztályadaptereket.