Freitag, 18. Mai 2012

Design Pattern - Singleton C#

Creational -> Singleton


Das Singleton Pattern stellt sicher, dass es vom gewünschten Objekt nur eine Instanz gibt und diese Global zu erreichen ist.

Beispiel:
class Program
    {
        static void Main(string[] args)
        {
            Overlord overlord1 = Overlord.GetOverlord();
            Overlord overlord2 = Overlord.GetOverlord();
            Overlord overlord3 = Overlord.GetOverlord();
            Overlord overlord4 = Overlord.GetOverlord();

            // Same instance?
            if (overlord1 == overlord2 && overlord2 == overlord3 && overlord3 == overlord4)
            {
                Console.WriteLine("Same overlord!");
            }


            // Summon 15 minions

            Overlord overlord = Overlord.GetOverlord();

            for (int i = 0; i < 15; i++)
            {
                var server = overlord.Minion;
                Console.WriteLine("Command your minion: " + server);
            }

            Console.ReadKey();

        }
    }


    class Overlord
    {
        private static Overlord _instance;
        private List<string> _minions = new List<string>();
        private Random _randomMinion = new Random();

        private static object syncLock = new object();
 
        // protected constructor
        protected Overlord()
        {
            _minions.Add("Minion1");
            _minions.Add("Minion2");
            _minions.Add("Minion3");
            _minions.Add("Minion4");
            _minions.Add("Minion5");
        }

        public static Overlord GetOverlord()
        {

          if (_instance == null)
          {
 
            lock (syncLock)
            {
 
              if (_instance == null)
              {
                _instance = new Overlord();
              }
            }
          }

          return _instance;
        }

        public string Minion
        {
          get
          {
            int random = _randomMinion.Next(_minions.Count);
            return _minions[random];
          }
        }
      }

Keine Kommentare:

Kommentar veröffentlichen