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

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

התמיכה המצוינת של Java בתכנות מונחה עצמים מקלה על השימוש בדפוס העיצוב היחיד.

יישום דפוס הסינגלטון באמצעות Java

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

הגישה הנלהבת

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

פּוּמְבֵּימעמדEagerSingleton{
פְּרָטִיסטָטִי מופע EagerSingleton = חָדָשׁ EagerSingleton();

פְּרָטִיEagerSingleton(){}

פּוּמְבֵּיסטָטִי EagerSingleton getInstance(){
לַחֲזוֹר למשל;
}
}

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

instagram viewer
משתנה מופע, אשר נגיש רק בתוך מחלקת הסינגלטון. הנקודה היחידה של גישה חיצונית למשתנה המופע היא דרך ה- getInstance() שיטה. שיטה זו מחזירה את המופע שנוצר קודם לכן של המחלקה.

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

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

הגישה העצלנית

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

פּוּמְבֵּימעמדLazySingleton{
פְּרָטִינָדִיףסטָטִי מופע LazySingleton;

פְּרָטִיLazySingleton(){}

פּוּמְבֵּיסטָטִי LazySingleton getInstance(){
אם (מופע == ריק) {
מסונכרן (LazySingleton.מעמד) {
אם (מופע == ריק) {
מופע = חָדָשׁ LazySingleton();
}
}
}

לַחֲזוֹר למשל;
}
}

הגישה העצלה פותרת את בעיית ריבוי ההליכים באמצעות ה מסונכרן מילת מפתח. זה מונע משני שרשורים לקבל גישה למשתנה המופע בו-זמנית. עם זאת, סנכרון יקר, כך שהיישום משתמש בו רק פעם אחת, כאשר הוא קורא לראשונה getInstance().

מתי להשתמש בתבנית הסינגלטון

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

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