עבור לתוכן

Singleton ומשתנה סטטי - ג'אווה

Featured Replies

פורסם

אם Singleton הוא בעצם משתנה שמוודא שתמיד ניגש לאותו מקום בזיכרון,

ומשתנה סטטי גם ניגש תמיד לאותו מקום -

אז מה ההבדל?

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

בשביל מה צריך את שניהם?

אשמח להסבר.

תודה!

פורסם

Singleton זו מחלקה שייתכן רק מופע אחד שלה.

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

MyClass x = new MyClass()

לעומת זאת, אם בנית את המחלקה כך שהיא סינגלטון, אז הקוד ()MyClass x = new MyClass לא יעבוד ואי אפשר יהיה ליצור מופעים של המחלקה - הדרך היחידה לקבל מופע של המחלקה הזו היא ע"י גישה לפונקציית הסינגלטון, דהיינו:

MyClass x = MyClass.getInstance()

כמובן, סינגלטון ו-static הולכים יד ביד, כי על מנת לממש סינגלטון יש צורך להשתמש ב-static.

נערך על-ידי שניצל

פורסם

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

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

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

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

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

והכי טוב תקרא את זה:

http://stackoverflow.com/questions/2765060/why-use-a-singleton-instead-of-static-methods

http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern

פורסם

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים