مقایسه الگوی طراحی Singelton و کلاس Static

دوشنبه 11 آبان 1394

مفهوم Singelton و کلاس های استاتیک گاهی اوقات توسط برنامه نویسان به اشتباه یکسان فرض می شود در این مقاله به مقایسه این دو مفهوم خواهیم پرداخت

مقایسه الگوی طراحی Singelton  و کلاس Static

Singleton کلاسی است که فقط یک شی از آن می توان ساخت. این نوع کلاس کاربرد های زیادی در برنامه نویسی دارد.گاهی نیاز داریم که شی ء ای را تعریف کنیم که بوسیله اشیاء دیگر قابل دستیابی باشد ولی در عین حال نیاز هست که فقط یک عدد از آن در کل برنامه وجود داشته باشد.به این معنی که از ایجاد بیش از یک نمونه از آن جلوگیری شود.مثلا دربرنامه تنها یک نشانگر ماوس باید وجود داشته باشد که در همه برنامه قابل دستیابی نیز هست.چنین اشیائی Singleton هستند.

نمونه کلاس تعریف شده با این مفهوم در زیر آمده است 

public sealed class Singleton  
{  
    private static volatile Singleton instance;  
    private static object sync = new Object();  
    private Singleton()  
    {}  
    public static Singleton GetInstance  
    {  
        get  
        {  
            if (instance == null)  
            {  
                lock(sync)  
                {  
                    if (instance == null) instance = new Singleton();  
                }  
            }  
            return instance;  
        }  
    }  
} 

زمانی که نیاز دارید شی ای از کلاسی بسازید که می دانید حاقظه زیادی در هر بار نمونه سازی از آن مصرف خواهد شد از الگوی طراحی Singleton استفاده کنید .با این کار تنها یک نمونه از آن شی ساخته می شود و در همه برنامه ها هم در دسترس است.

همانطور که در شکل زیر می بینید نحوه ساخت کلاس های از نوع Singleton به این صورت است که یک سازنده از نوع Private  دارد .متدها Public از نوع استاتیک دارد و یک عضو استاتیک هم دارد.

کلاس استاتیک

بسیاری از برنامه نویسان نمی دانند که از کدام کلاس استفاده کنند .کلاس Singleton یا کلاس استاتیک

زمانی از کلاس استاتیک(Static class) استفاده می کنید که می دانید نمی خواهید وضعیت یا State را نگه داری کنید در غیر این صورت باید از کلاس Singleton استفاده کنید

کلاس استاتیک تنها شامل اعضای استاتیک است .شما نمی توانید شی از از آن بسازید و نمی توانید کلاسی از آن مشتق کنید.اما در کلاس از نوع Singleton می توان آن را به عنوان کلاس Base در نظر گرفت و از آن ارث بری کرد.

در زیر نمونه کلاس استاتیک آورده شده است 

using System;  
public static class Square  
{  
    public static double side;  
    public static double Perimeter()  
    {  
        return side * 4;  
    }  
    public static double Area()  
    {  
        return side * side;  
    }  
}  
public class Exercise  
{  
    public static int Main()  
    {  
        Square.Side = 36.84;  
        Console.WriteLine("Square Characteristics");  
        Console.Write("Side: ");  
        Console.WriteLine(Square.side);  
        Console.Write("Perimeter: ");  
        Console.WriteLine(Square.Perimeter());  
        Console.Write("Area: ");  
        Console.WriteLine(Square.Area());  
        return 0;  
    }  
}  

پس از کلاس استاتیک نمی توان نمونه گرفت یا شی ایجاد کرد ولی از کلاس Singleton فقط و فقط می توان یک نمونه ساخت .این کلاس به تمام برنامه کاربران و ..... خدمات ارائه می دهد.

این کلاس در هر Thread یا کاربر یا هر Session نمونه سازی نمی شود و فقط همان یک نمونه وضعیت خود و مقادیر تمام متغیر هایش را حفظ می کند.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 4 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید