SingleTon

4 בSeptember 2012

3 תגובות

Singleton Pattern

 

הרעיון:

בוא נחשוב על התרחיש
הבא,

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

הראשון מאתחל את
המערכת בזמן שהשני עורך מסמך..

בוא נעצור את התרחיש
כאן..

בבירור נרצה שכל
משתמש פיזי על המערכת יהיה אחד בכל פעם

 ועכשיו לדוגמא מעשית יותר:

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

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

במילים אחרות למנוע
מצב של מופעים מרובים על אותו אובייקט

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

או שנרצה ליצור לקלאס
מצב של
singleton
 שהוא טיפה יותר נוח מסתם קלאס סטטי,

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

 

מימוש מקובל של singleton  בC#

namespace Demos.SingleTon

{

   public class MySingleTonObject

   {

      private static MySingleTonObject instance = new MySingleTonObject ();

 

      protected MySingleTonObject ()

      {

         //לכאן אין גישה לאף אחד רק מתוך הקלאס  

      }

 

      public static MySingleTonObject Instance

      {

         get { return instance; }

      }

במימוש הנ”ל אנו
מוודאים שלאף אחד אין גישה ל
ctor של האובייקט

( מאחר שהוא  protected  ורק
מתוק הקלאס ניתן לפנות ל
ctor)

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

למעשה מימושי singleton
כאלה ואחרים מסתמכים בד”כ על
  static כלשהו ,

הסיבה שבחרתי להתחיל בסינגל
טון היא

א.     
הוא קל להבנה ומימוש,

ב.     
כנראה הכי מוכר

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

 

המשך
יבוא.

 

 

הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *

3 תגובות

  1. Jasper4 בSeptember 2012 ב 13:38

    Please add thread-safe singleton and signleton serialization. Thanks

    Reply
  2. uriel6 בSeptember 2012 ב 9:09

    thread safe singlton ? i will.. tnx

    Reply
  3. יותם10 בSeptember 2012 ב 19:22

    ואם אפשר גם דוגמא ל
    lazy instanttiation

    Reply