דפוס איתור שירות ויישום Java

1. הקדמה

במדריך זה, אנו הולכים ללמוד על דפוס העיצוב של Locator Service ב- Java.

נתאר את הרעיון, ניישם דוגמה ונדגיש את היתרונות והחסרונות של השימוש בו.

2. הבנת התבנית

מטרת דפוס איתור השירותים היא להחזיר את מופעי השירות על פי דרישה. זה שימושי לניתוק צרכני שירות ממחלקות בטון.

יישום יורכב מהרכיבים הבאים:

  • לקוח - אובייקט הלקוח הוא צרכן שירות. היא אחראית להפעלת הבקשה ממאתר השירות
  • איתור שירותים - הוא נקודת כניסה לתקשורת להחזרת השירותים מהמטמון
  • מטמון - אובייקט לאחסון אזכורים לשירותים לשימוש חוזר בהמשך
  • Initialisator - יוצר ורושם הפניות לשירותים במטמון
  • שירות - רכיב השירות מייצג את השירותים המקוריים או את יישומם

אובייקט השירות המקורי מחפש את המאתר ומוחזר על פי דרישה.

3. יישום

עכשיו, בואו נהיה מעשיים ונסתכל על המושגים באמצעות דוגמה.

ראשית, ניצור MessagingService ממשק לשליחת הודעות בדרכים שונות:

ממשק ציבורי MessagingService {String getMessageBody (); מחרוזת getServiceName (); }

לאחר מכן נגדיר שתי יישומים של הממשק למעלה, השולחים הודעות באמצעות דוא"ל ו- SMS:

מחלקה ציבורית EmailService מיישמת את MessagingService {public String getMessageBody () {להחזיר "הודעת דוא"ל"; } מחרוזת ציבורית getServiceName () {להחזיר "EmailService"; }}

ה שירות SMS הגדרת הכיתה דומה ל- שירות אימייל מעמד.

לאחר הגדרת שני השירותים, עלינו להגדיר את ההיגיון כדי לאתחל אותם:

מחלקה ציבורית InitialContext {חיפוש חפץ ציבורי (ServiceName מחרוזת) {if (serviceName.equalsIgnoreCase ("EmailService")) {החזר EmailService חדש (); } אחר אם (serviceName.equalsIgnoreCase ("SMSService")) {להחזיר SMSService חדש (); } להחזיר אפס; }}

הרכיב האחרון שאנו זקוקים לו לפני שמרכיבים את אובייקט איתור השירות הוא המטמון.

בדוגמה שלנו, מדובר בכיתה פשוטה עם a רשימה תכונה:

מטמון מחלקה ציבורית {שירותי רשימה פרטיים = ArrayList חדש (); public MessagingService getService (String serviceName) {// אחזר מהרשימה} public void addService (MessagingService newService) {// הוסף לרשימה}} 

לבסוף, אנו יכולים ליישם את מחלקת איתור השירותים שלנו:

מחלקה ציבורית ServiceLocator {מטמון מטמון סטטי פרטי = מטמון חדש (); שירות סטטי ציבורי MessagingService getService (שירות מחרוזת) {MessagingService service = cache.getService (serviceName); אם (שירות! = null) {שירות חוזר; } הקשר InitialContext = InitialContext חדש (); MessagingService service1 = (MessagingService) הקשר. Lookup (serviceName); cache.addService (service1); שירות החזרה 1; }}

ההיגיון כאן פשוט למדי.

בכיתה מתקיים מופע של מטמון. ואז, ב getService () בשיטה, הוא יבדוק תחילה את המטמון עבור מופע של השירות.

ואז, אם זה ריק, זה יקרא לוגיקת האתחול ויוסיף את האובייקט החדש למטמון.

4. בדיקות

בואו נראה כיצד נוכל להשיג מקרים כעת:

שירות MessagingService = ServiceLocator.getService ("שירות אימיילים"); דוא"ל מחרוזת = service.getMessageBody (); MessagingService smsService = ServiceLocator.getService ("SMSService"); מחרוזת sms = smsService.getMessageBody (); MessagingService emailService = ServiceLocator.getService ("EmailService"); מחרוזת newEmail = emailService.getMessageBody ();

בפעם הראשונה שאנחנו מקבלים את שירות אימייל מ ה ServiceLocator מופע חדש נוצר ומוחזר. ואז, לאחר שקראתי לזה בפעם הבאה ש- שירות אימייל יוחזר מהמטמון.

5. איתור שירות לעומת הזרקת תלות

במבט ראשון, דפוס איתור השירות עשוי להיראות דומה לתבנית ידועה אחרת - דהיינו הזרקת תלות.

ראשית, חשוב לציין זאת גם הזרקת תלות וגם דפוס איתור השירות הם יישומים של תפיסת ההיפוך מבקרה.

לפני שתמשיך הלאה, למד עוד על הזרקת תלות במכתב זה.

ההבדל העיקרי כאן הוא שאובייקט הלקוח עדיין יוצר את התלות שלו. הוא פשוט משתמש באיתור לשם כך, כלומר הוא זקוק להתייחסות לאובייקט האיתור.

לשם השוואה, כאשר משתמשים בזריקת התלות, המחלקה ניתנת לתלות. המזרק נקרא פעם אחת בלבד בעת ההפעלה כדי להזרים תלות בכיתה.

לבסוף, נבחן כמה סיבות להימנע משימוש בתבנית Locator Service.

טענה אחת כנגדה היא שהיא מקשה על בדיקות היחידות. בעזרת הזרקת תלות נוכל להעביר אובייקטים מדומים מהמחלקה התלותית למופע שנבדק. מצד שני, זהו צוואר בקבוק עם דפוס Locator Service.

נושא נוסף הוא שזה יותר מסובך להשתמש בממשקי API המבוססים על דפוס זה. הסיבה לכך היא שהתלות מסתתרת בתוך הכיתה והם מאומתים רק בזמן הריצה.

למרות כל אלה, דפוס איתור השירות קל לקידוד והבנה ויכול להיות בחירה מצוינת ליישומים קטנים.

6. מסקנה

מדריך זה מראה כיצד ומדוע להשתמש בתבנית העיצוב של Locator Service. הוא דן בהבדלים המרכזיים בין דפוס העיצוב של Locator Service לבין תפיסת הזרקת התלות.

באופן כללי, על המפתח לבחור כיצד לעצב את הכיתות באפליקציה.

דפוס איתור שירותים הוא דפוס פשוט לניתוק קוד. עם זאת, במקרה של שימוש בשיעורים במספר יישומים, הזרקת תלות היא בחירה נכונה.

כרגיל, הקוד השלם זמין בפרויקט Github.


$config[zx-auto] not found$config[zx-overlay] not found