الگوی طراحی نرم افزار - Singleton

الگوی طراحی نرم افزار اصلاحا به راه حل های استاندارد  و قابل استفاده مجدد ،برای حل مشکلات عمومی توسعه نرم افزار اطلاق میگردد. یک الگو  راه حل نهایی حل شده نیست که به سرعت بتوانیم به سراغ پیاده سازی آن بریم. بلکه شرحی است از نحوه حل مشکل که باید آنرا تکمیل کرد و در زبان برنامه نویسی مورد نظر بومی سازی و پیاده سازی نمود. استفاده از الگو های طراحی نرم افزار سرعت توسعه برنامه را بسیار زیاد میکند و چون از یک راه حل استاندارد استفاده شده است قابلیت توسعه و نگه داری بهتری نیز دارد. الگوهای طراحی تا سال 1994 شهرت چندانی نداشتند. اما بعد از اینکه کتاب Design Patterns: Elements of Reusable Object-Oriented Software توسط آقایان  Erich Gamma، Richard Helm,
Ralph Johnsonو John Vlissidesانتشار یافت، شهرت و محبوبیت الگوهای طراحی به سرعت زیاد شد. در این کتاب 23 الگو در 3 دسته شرح داده شده بود. این گروه ها عبارتند از  الگوهای سازنده یا creational الگوهای ساختاری یا
structural و الگوهای عملکرد یا behavioral.
امروز میخواهیم کار خود را بایک الگوی بسیار ساده از  دسته  Creational شروع کنیم. الگوی ساده، زیبا و پر کاربرد Singleton.
در زمانی که نیاز دارید که از یک کلاس تنها یک شی ایجاد شود و مطمئن باشید که نمونه دیگری از این شی وجود ندارد، و تمام قسمت های مختلف برنامه شما تنها از این شی استفاده میکنند میتوانید به الگوی Singleton اعتماد کنید.
اما پیاده سازی این الگو در زبان


public sealed class Singleton
{
    private Singleton() { }
    static readonly Singleton instance = new Singleton();
    public static Singleton Instance
    {
        get { return instance; }
    }
}
در این کلاس، سازنده کلاس به صورت خصوصی علامت گذاری شده است. در نتیجه امکان ایجاد یک شی از کلاس به کمک New وجود ندارد. حالا که جلوی ایجاد شی را برای برنامه نویس بستیم، باید به طریقی امکان ایجاد یک شی را از این کلاس ایجاد کنیم.
برای این منظور یک خاصیت خصوصی و فقط خواندنی به صورت استاتیک به این کلاس اضافه میکنیم که از جنس همین کلاس است. خصوصی است برای اینکه امکان تغییر آن به وسیله برنامه نویس وجود نداشته باشد. فقط خواندنی است تا فقط یک بار بتوان به آن مقدار داد. و استاتیک است تا بین تمامی نمونه های ایجاد شده از این کلاس مشترک باشد.
حالا این کلاس را به کمک متد UniqueInstance در اختیار استفاده کننده ها میگذاریم.
در قسمت زیر راه پیاده سازی دیگری برای شما به نمایش گذاشته شده که تحلیل آن به عهده خود شما است.

public sealed class Singleton
{
    private Singleton() { }
    static Singleton instance;
    public static Singleton Instance
    {
        get
        {
            if (instance == null)
                instance = new Singleton();
            return instance;
        }
    }
}

3 نظرات:

حسین مرادی نیا گفت...

بهتر نیست به جای متد سازنده Private کلاس رو به صورت Static تعریف کنیم؟!!

علیرضا ارومند گفت...

سلام
ببینید بحث کلاس های استاتیک با کلاس هایی که برای نمونه سازی از روش سینگلتون استفاده میکنن دو تا بحث جدا هستن. در کلاس های استاتیک اصلا نمونه ای از کلاس ساخته نمی شوند. اما اینجا تنها 1 نمونه از کلاس ما در کل برنامه ایجاد میشود.

حسین مرادی نیا گفت...

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