Feedback

C# - Singleton

Veröffentlicht von am 01.12.2007
(1 Bewertungen)
Generische und threadsichere Implementierung des Singleton Entwurfsmusters
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Aufbau

In dieser Schulung lernen Sie fortgeschrittene Techniken im Bereich .Net C#. Dabei stehen neben den eigentlichen Techniken auch architektonische Aspekte im Mittelpunkt.

VB.NET Aufbau

Sie verfügen nach der Schulung über fundierte Kenntnisse in der Arbeit mit objektorientierten Modellen in VB.NET und können wiederverwendbare Komponenten eigenständig erzeugen.

#region Using Statements
using NUnit.Framework;
#endregion

namespace Helper
{
    namespace DesignPatterns
    {
        /// <summary>
        /// Implementation of the Singleton Pattern. The singleton pattern is one of 
        /// the best-known patterns in software engineering. Essentially, a singleton 
        /// is a class which only allows a single instance of itself to be created, and 
        /// usually gives simple access to that instance. Most commonly, singletons 
        /// don't allow any parameters to be specified when creating the instance - as 
        /// otherwise a second request for an instance but with a different parameter 
        /// could be problematic!
        /// http://www.yoda.arachsys.com/csharp/singleton.html
        /// </summary>
        /// <typeparam name="T">type of the singleton</typeparam>
        public sealed class Singleton<T> where T : class, new()
        {
            static T m_Instance = null;

            /// <summary>
            /// this variable is used for thread safety
            /// </summary>
            static readonly object m_Padlock = new object();

            /// <summary>
            /// returns the reference of the singleton
            /// </summary>
            public static T Instance
            {
                get
                {
                    lock (m_Padlock)
                    {
                        if (m_Instance == null)
                        {
                            m_Instance = new T();
                        }
                        return m_Instance;
                    }
                }
            }
        }
    }

    namespace UnitTests
    {
        class Account
        {
            int number;

            public int Number
            {
                get { return number; }
                set { number = value; }
            }
        }

        [TestFixture]
        public class TestSingleton
        {
            [Test]
            public void TestSingletonClass()
            {
                DesignPatterns.Singleton<Account>.Instance.Number = 34;
                Assert.AreEqual(34, DesignPatterns.Singleton<Account>.Instance.Number);
            }
        }
    }
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!