תבנית משקל זבוב בג'אווה

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

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

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

מצבו של אובייקט המשקל העף מורכב ממרכיב בלתי משתנה המשותף עם אובייקטים דומים אחרים (פְּנִימִי) ורכיב משתנה שניתן לתפעל באמצעות קוד הלקוח (חִיצוֹנִי).

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

2. יישום

האלמנטים העיקריים של הדפוס הם:

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

בואו נראה כיצד ליישם כל רכיב.

2.1. ממשק רכב

ראשית, ניצור א רכב מִמְשָׁק. מכיוון שממשק זה יהיה סוג ההחזרה של שיטת המפעל עלינו לוודא לחשוף את כל השיטות הרלוונטיות:

התחלה בטלנית ציבורית (); עצירה בטלנית ציבורית (); ציבורי צבע getColor ();

2.2. רכב בטון

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

מנוע מנוע פרטי; צבע צבע פרטי;

2.3. מפעל רכב

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

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

פרטי מפה סטטית פרטיתCache = HashMap חדש (); רכב סטטי ציבורי createVehicle (צבע צבע) {רכב newVehicle = vehiclesCache.computeIfAbsent (color, newColor -> {Engine newEngine = מנוע חדש (); להחזיר רכב חדש (newEngine, newColor);}); להחזיר newVehicle; }

שימו לב כיצד קוד הלקוח יכול להשפיע רק על המצב החיצוני של האובייקט (צבע הרכב שלנו) המעביר אותו כטיעון ל createVehicle שיטה.

3. השתמש במקרים

3.1. דחיסת מידע

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

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

3.2. מטמון נתונים

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

כמובן, ישנם כמה הבדלים מרכזיים במורכבות וביישום בין דפוס זה לבין מטמון טיפוסי, כללי.

4. מסקנה

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

כל הקוד מהדוגמאות זמין בפרויקט GitHub.


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