الگوی سینگلتن (Singleton)



این الگو تضمین میکنه که یک کلاس همیشه یک نمونه (Instance) داره و یک اشاره گر سراسری برای دسترسی به نمونه اون کلاس میده.

UML دیاگرام یک کلاس سینگلتن به شکل زیره:






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






// Singleton pattern -- Structural example



using System;

 

namespace DoFactory.GangOfFour.Singleton.Structural

{

  ///

  /// MainApp startup class for Structural

  /// Singleton Design Pattern.

  ///

  class MainApp

  {

    ///

    /// Entry point into console application.

    ///

    static void Main()

    {

      // Constructor is protected -- cannot use new

      Singleton s1 = Singleton.Instance();

      Singleton s2 = Singleton.Instance();

 

      // Test for same instance

      if (s1 == s2)

      {

        Console.WriteLine("Objects are the same instance");

      }

 

      // Wait for user

      Console.ReadKey();

    }

  }

 

  ///

  /// The 'Singleton' class

  ///

  class Singleton

  {

    private static Singleton _instance;

 

    // Constructor is 'protected'

    protected Singleton()

    {

    }

 

    public static Singleton Instance()

    {

      // Uses lazy initialization.

      // Note: this is not thread safe.

      if (_instance == null)

      {

        _instance = new Singleton();

      }

 

      return _instance;

    }

  }

}

دقت کنید که متد Instance کار سازنده رو میکنه و به صورت static تعریف شده تا بدون نیار به نمونه قابل دسترسی باشه و متد سازنده رو protected کردیم تا کسی نتونه یک نمونه دیگه از روی این کلاس بسازه. متد های دیگر کلاس سینگلتن نیازی نیست بصورت static تعریف بشن.

یه روش بهتر میتونه کد زیر باشه:




public sealed class Singleton
{
    static readonly Singleton instance=new Singleton();

    // Explicit static constructor to tell C# compiler
    // not to mark type as beforefieldinit
    static Singleton()
    {
    }

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}

الگوی سنگلتن با static کمی فرق میکنه. این الگو اجازه ی نمونه ساختن از روی کلاس رو نمیده در حالی که static عملا الگوی سنگلتن رو تو دل خودش تضمین میکنه.

امیدوارم مفید باشه

یا علی

/ 7 نظر / 120 بازدید
محمد رضا

با سلام چنانچه مایل به تبادل لینک هستید لینک ما را با عنوان طراحی وب سایت و آدرس http://www.tamweb.ir در سایتتان قرار دهید و به ما اطلاع دهید تا لینک شما را قرار دهیم. خوشحال میشیم وب لاگ شما را به بازدیدکنندگان وب سایتمون معرفی کنیم

فاطمه

دوست عزيز سلام- اگه مايل به تبادل لينک هستي لطفا منو با عنوان جديدترين مدل لباس 2010 لينک کن و بعد اطلاع بده تا منم سريعا وب شما رو لينک کنم . رنک وبلاگم دو هست با تشکر

پرشين طراح

سلام خوبي؟ وبلاگ بسيار خوبي داري اگه موافق باشي با هم تبادل لينک کنيم ؟ پيج رنک سايت ما نيز 3 هست که به بالا رفتن رنک شما نيز کمک ميکند اگه موافقي سايت www.persiantarah.com من رو با عنوان طراحي سايت به لينک بده و بعد به ايميل بزن تا من هم شمارو لينک کنم مرسي persiantarah@gmail.com

نرگس

وبلاگتون خیلی خوب بود . من به کمم دوستان تصمیم گرفتینم درباره تکه برنامه های مهم و الگوریتم های معروف"++ C "وبلاگ بزنیم و اطلاهاتمون رو در اختیار علاقمندان بذاریم حالا شما کمکمون می کنید خواهش می کنم ما رو راهنمابی کنید.

Tooraj

سلام دوست گرامی خیلی وقت هست که از مطالب خوب سایت شما استفاده می کنم.اگر تمایل به تبادل لینک یا بنر با سایت ما را دارید لطفا درخواست خود را با ما در میان بگذارید . در صورتی که مطلب جالب یا پروژه ای مرتبط با مطالب سایت ما دارید می توانید آن را در انجمن سایت ثبت کرده و پس از تایید مدیران در سایت اصلی با نام خودتان قرار دهیم. سایت ElectRobot آماده پذیرش تبلیغ برای پروژه های شما و فروش آنها می باشد. لطفا در نظرسنجی ساخت اولین میکروکنترلر ایرانی به وسیله تیم ElectRobot که در انجمن سایت موجود می باشد شرکت نمایید. لطفا لینک ما را با نام ( پروژه دانشجویی - ElectRobot.ORG ) ثبت کنید. یا بنر سایت ما را قرار دهید و به ما اطلاع دهید.page rank سایت ما در 4 از شروع سایت 1 است. با تشکر : مدیر سایت website : http://electrobot.org forum : http://porojesara.ir

نفیس

سلام. لطفا منو در زمینه برنامه نویسی سیشارپ راهنمایی کنید. خواهش میکنم.