תבנית ה- Proxy בג'אווה

1. סקירה כללית

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

2. דוגמה לתבנית פרוקסי

שקול אובייקט Java כבד (כמו חיבור JDBC או SessionFactory) הדורש תצורה ראשונית כלשהי.

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

בואו ניצור ממשק פשוט והתצורה של אובייקט זה:

ממשק ציבורי ExpensiveObject {תהליך ריק (); }

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

מחלקה ציבורית ExpensiveObjectImpl מיישמת ExpensiveObject {public ExpensiveObjectImpl () {heavyInitialConfiguration (); } @ ביטול תהליך הריק הציבורי () {LOG.info ("העיבוד הושלם."); } ריק ריק heavyInitialConfiguration () {LOG.info ("טוען תצורה ראשונית ..."); }}

כעת נשתמש בתבנית ה- Proxy ונתחל את האובייקט שלנו על פי דרישה:

מחלקה ציבורית ExpensiveObjectProxy מיישמת ExpensiveObject {אובייקט סטטי פרטי ExpensiveObject; @ ביטול תהליך הריק הציבורי () {if (object == null) {object = new ExpensiveObjectImpl (); } object.process (); }}

בכל פעם שהלקוח שלנו מתקשר אל תהליך() בשיטה, הם רק יזכו לראות את העיבוד והתצורה הראשונית תמיד תישאר מוסתרת:

ריק סטטי ציבורי ראשי (String [] args) {ExpensiveObject object = new ExpensiveObjectProxy (); object.process (); object.process (); }

שים לב שאנחנו קוראים ל- תהליך() שיטה פעמיים. מאחורי הקלעים, חלק ההגדרות יתרחש רק פעם אחת - כאשר האובייקט מאותחל לראשונה.

בכל שיחה אחר כך תבנית זו תדלג על התצורה הראשונית ורק עיבוד יתרחש:

טוען את התצורה הראשונית ... העיבוד הושלם. העיבוד הושלם.

3. מתי להשתמש ב- Proxy

הבנת איך חשוב להשתמש בתבנית.

הבנת מתי השימוש בו הוא קריטי.

בואו נדבר מתי להשתמש בתבנית ה- Proxy:

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

4. מסקנה

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

  • כשאנחנו רוצים לקבל גרסה פשוטה של ​​אובייקט או לגשת לאובייקט בצורה מאובטחת יותר
  • כשאנחנו רוצים גרסה מקומית של אובייקט מרוחק

קוד המקור המלא לדוגמא זו זמין ב- GitHub.