שיעור סינגלטון בג'אווה - כיצד להשתמש בשיעור סינגלטון?



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

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

להלן הנושאים שאעסוק במאמר זה:





יישום רשימה מקושרת בסי '

בוא נתחיל.

מהי כיתת סינגלטון בג'אווה?

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



אבל למה אנחנו בכלל צריכים שיעור סינגלטון?

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

אני מקווה שאתה ברור עם הרעיון של שיעור Singleton בג'אווה. אז בואו נמשיך הלאה בזהמאמר Singleton Class ב- Java וראה כיצד הם נוצרים.



דרכים לעצב כיתת Java Singleton

על מנת ליצור יחיד בכיתה בג'אווה, אתה צריך את שלושת הדברים הבאים:

  1. חבר סטטי בכיתה
  2. קונסטרוקטור פרטי
  3. שיטת מפעל סטטית

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

  1. שיטת אתחול נלהבת
  2. שיטת אתחול עצלה
  3. חוט שיטת סינגלטון בטוחה
  4. אתחול עצלן בשיטת נעילה כפולה
  5. שיטת עומס עצלן
  6. שיטת אתחול בלוקים סטטיים

בואו נצלול עמוק יותר לכל אחת מהגישות הללו אחת אחת.

1. שיטת אתחול להוט

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

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

עכשיו, בואו נראה איך ליישם את אלה.

// ייעול אתחול בכיתה ציבורית EagerSingleton {גמר סטטי פרטי EagerSingleton INSTANCE = חדש EagerSingleton () פרטי EagerSingleton () {} ציבורי סטטי EagerSingleton getInstance () {return INSTANCE}}

אם אתה רואה את הקוד, אתה יכול לראות שבכל פעם שאנחנו מייצרים אובייקט שאנחנו משתמשים בוgetInstance ()שיטה במקום להפעיל את הכיתה בּוֹנֶה .אבל יש לו חסרונות משלו. אם אתה משתמש בשיטה זו ליצירת יחיד בכיתה, אז נוצר מופע ללא קשר לעובדה אם היישום משתמש בו או לא.

אז בואו נתקדם ונראה דרך אחרת ליצור כיתת יחיד בג'אווה.

2. שיטת אתחול עצלה

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

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

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

// עצל אתחול LazySingleton {פרטי סטטי LazySingleton INSTANCE = null פרטי LazySingleton () {} LazySingleton סטטי ציבורי getInstance () {if (INSTANCE == null) {מסונכרן (LazySingleton.class) {INSTANCE = LazySingleton חדש ()}} החזר INSTANCE}}

3. חוט בטוח Singleton שיטה

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

// Thread Safe Singleton class class ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} ציבור סטטי מסונכרן ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = ThreadSafeSingleton new ()} return INSTANCE}

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

4. אתחול עצלן עם נעילה כפולה שיטה

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

מה זה דפוס בג'אווה
// אתחול עצל עם מחלקה פעמיים נעילה כפולה LazyDoubleLockSingleton {פרטי סטטי LazyDoubleLockSingleton INSTANCE = null פרטי LazyDoubleLockSingleton () {} פומבי סטטי LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {מסונכרן (LazyDoubleLockANCEclassSinglet == == null) null) {INSTANCE = חדש LazyDoubleLockSingleton ()}}} החזר INSTANCE}}

5. שיטת עומס עצלן

שיטה זו מבוססת על JSL (Java Language Specification) ועל פי זה יטען חברי נתונים סטטיים רק כאשר הם נדרשים. לכן כאשר מחלקת הסינגלטון שלך נטענת ב- JVM, לא נוצר שום מופע. יתר על כן, במהלך ביצוע התוכנית מופעלת השיטה הגלובלית בסדר רציף. בשיטה זו, אינך צריך לסנכרן במפורש את getInstance הסטטי () כדי לטעון ולאתחל. חבר הכיתה הסטטי יופעל באופן רצף ראוי, שאר הפניות המקבילות של השיטה הגלובלית מוחזרות באותו סדר מבלי שתצטרך לבצע את תקרת הסינכרון.

להלן הקוד לבצע אותו.

// Lazy Load Method Class public LazyLoadSingleton {private LazyLoadSingleton () {} class static private SingletonClassHolder {final final Var INSTANCE = LazyLoadSingleton (new)} סטטי ציבורי LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}

6. שיטת אתחול בלוקים סטטיים

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

// אתחול סטטי של בלוק סטטי מחלקה ציבורית StaticBlockSingleton {סטטי פרטי StaticBlockSingleton INSTANCE פרטי StaticBlockSingleton () {} // טיפול חריג בתוך סטטי בלוק סטטי {try {INSTANCE = new StaticBlockSingleton ()} לתפוס (חריג e) {לזרוק RuntimeException ('חריג התרחש בעת יצירת כיתת Singleton ')}} סטטית ציבורית StaticBlockSingleton getInstance () {return INSTANCE}}

זה מביא אותנו לסוף מאמר זה על שיעור Singleton בג'אווה. אם אתה רוצה לדעת יותר על Java תוכל לעיין בכתובת שלנו .

עכשיו אחרי שהבנת מה זה שיעור סינגלטון בג'אווה, בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך יתרון לתכנות ג'אווה ולהכשיר אותך למושגי ג'אווה מרכזיים ומתקדמים יחד עם מסגרות Java שונות כמו Hibernate & Spring.

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