עם עלייתה של ארכיטקטורה מוכוונת שירות (SOA), יותר ויותר ארגונים משתמשים בשירותי צד שלישי עבור המערכות הארגוניות שלהם. חברות אלה צריכות לעמוד בקצב של סביבה עסקית המשתנה במהירות, מה שיכול להיות נטישת השירותים של ספק שירות אחד עבור אחר.
במקרים כאלה, הארכיטקטורה הקיימת של העסק עשויה להיות לא תואמת את זו של ספק חדש. במקום לבזבז חודשים על שכתוב קוד ארגוני כדי להפוך אותו לתואם לתוכנה חדשה, עסק יכול להשתמש בדפוס עיצוב המתאם.
מהי דפוס עיצוב המתאם?
תבנית המתאם מאפשרת למחלקות שיש להם ממשקים לא תואמים לעבוד יחד. הוא עושה זאת על ידי המרת הממשק של מחלקה (או תוכנה) קיימת לממשק שלקוח (או שירות) מצפה לו. ישנם שני סוגים של מתאמים: מתאמי אובייקט ומתאמי כיתה.
מתאם האובייקט משתמש בקומפוזיציה כדי לעטוף את המתאם במתאם, ומייצר למעשה את הממשק שהלקוח מצפה לו. לכן, אם הלקוח מצפה למחרוזת, המתאם ייקח מספר שלם (המתאם) ויעניק לו את המאפיינים של מחרוזת.
דיאגרמת המחלקה למעלה מייצגת את מתאם האובייקטים. ה מחלקת מתאמים
מיישם את ממשק היעד, מקבל למעשה גישה לכל שיטות הממשק. ואז הוא מתאים את an מותאם ועוטפת את זה מותאם עם ה ממשק היעד שיטות.מתאם המחלקה משתמש בירושה מרובה, כאשר מחלקת המתאם היא תת המחלקה של המתאם וגם של מחלקת היעד. תרשים המחלקה להלן מייצג את מתאם המחלקה, שבו אתה חופשי להשתמש בשפות תכנות התומכות בירושה מרובה.
הטמעת דפוס עיצוב המתאם ב-Java
יישום זה יישם את מתאם האובייקטים. אפליקציה לדוגמה זו תדמה ארגון פיננסי העובר משימוש ועיבוד של כרטיסי חיוב לכרטיסי אשראי. ארגון זה השתמש במקור בממשק כרטיס החיוב הבא:
פּוּמְבֵּימִמְשָׁקChargeCard{
פּוּמְבֵּיבָּטֵלמאזן חודשי();
פּוּמְבֵּיבָּטֵלעמלת מאוחר();
פּוּמְבֵּיבָּטֵלתשלום שנתי();
}
סוג פופולרי של כרטיס חיוב שהמערכת של ארגון זה מעבדת הוא כרטיס השזיף:
פּוּמְבֵּימעמדPlumCardמיישםChargeCard{
פְּרָטִיint מספר הכרטיס;
פְּרָטִי מחרוזת customerName;
פְּרָטִילְהַכפִּיל איזון;// בנאי ראשי
פּוּמְבֵּיPlumCard(int cardNo, String customerName, לְהַכפִּיל איזון){
זֶה.cardNo = cardNo;
זֶה.customerName = שם הלקוח;
זֶה.balance = איזון;
}
// גטרים וקובעים
פּוּמְבֵּיintgetCardNo(){
לַחֲזוֹר מספר הכרטיס;
}
פּוּמְבֵּיבָּטֵלsetCardNo(int מספר הכרטיס){
זֶה.cardNo = cardNo;
}
פּוּמְבֵּי חוּט getCustomerName(){
לַחֲזוֹר שם לקוח;
}
פּוּמְבֵּיבָּטֵלsetCustomerName(מחרוזת customerName){
זֶה.customerName = שם הלקוח;
}
פּוּמְבֵּילְהַכפִּילgetBalance(){
לַחֲזוֹר איזון;
}
פּוּמְבֵּיבָּטֵלsetBalance(לְהַכפִּיל איזון){
זֶה.balance = איזון;
}
@עקוף
פּוּמְבֵּיבָּטֵלמאזן חודשי(){
System.out.println("בינואר " + זֶה.customerName + "ביליתי" + זֶה.איזון);
}
@עקוף
פּוּמְבֵּיבָּטֵלעמלת מאוחר(){
System.out.println(זֶה.customerName + "עמלת איחור חודשית היא $80.00");
}
@עקוף
פּוּמְבֵּיבָּטֵלתשלום שנתי(){
System.out.println(זֶה.customerName + "תשלום שנתי הוא $200.00");
}
}
מוסד פיננסי זה עובר לכרטיסי אשראי ומוציא את כרטיסי החיוב בהדרגה, כך שלחלק מהלקוחות שלהם יש כעת כרטיסי אשראי:
פּוּמְבֵּימִמְשָׁקכרטיס אשראי{
פּוּמְבֵּיבָּטֵלחודשי מינימום תשלום();
פּוּמְבֵּיבָּטֵלריבית();
פּוּמְבֵּיבָּטֵלתשלום שנתי();
}
המערכת הארגונית של מוסדות פיננסיים מעבדת כעת רק כרטיסי אשראי, מכיוון שהיא מעוניינת להפסיק את השימוש בכרטיסי חיוב בשנה הקרובה. אבל רוב הלקוחות שלהם עדיין משתמשים בכרטיסי חיוב. אז, המהנדסים החליטו שעדיף ליישם מתאם עד שכל הלקוחות שלהם יעברו לכרטיס אשראי.
פּוּמְבֵּימעמדChargeCardAdapterמיישםכרטיס אשראי{
ChargeCard ChargeCard;פּוּמְבֵּיChargeCardAdapter(ChargeCard ChargeCard){
זֶה.chargeCard = chargeCard;
}@עקוף
פּוּמְבֵּיבָּטֵלחודשי מינימום תשלום(){
זֶה.chargeCard.monthlyBalance();
}@עקוף
פּוּמְבֵּיבָּטֵלריבית(){
זֶה.chargeCard.lateFee();
}
@עקוף
פּוּמְבֵּיבָּטֵלתשלום שנתי(){
זֶה.chargeCard. תשלום שנתי();
}
}
מתאם כרטיס תשלום זה שיעור Java מיישמת את כרטיס האשראי ממשק Java. הוא מתאים את ChargeCard (המתאפיין), ומעניק לו את המאפיינים של כרטיס אשראי. לדוגמה, המערכת תעבד את עמלת הריבית של כרטיס אשראי, שהיא עמלת האיחור של לקוח כרטיס חיוב שטרם ביצע המרה.
יתרונות השימוש בתבנית המתאם
היתרון העיקרי בשימוש בדפוס המתאם הוא בכך שהוא מאפשר ללקוחות להשתמש בשירותים, ספריות ותכונות חדשות מבלי לשנות את הקוד שלהם. זה מקדם את מדרגיות האפליקציה.
יתרון נוסף הוא שתבנית זו גם גמישה. תבנית המתאם מספקת שתי שיטות יישום: מתאמי אובייקט ומתאמי מחלקה.