logo MSJO.kr

Singleton Pattern in C# with Example

2020-07-17
MsJ

특정 클래스의 인스턴스 하나만 생성되도록 하고 전체 애플리케이션에 대해 해당 인스턴스에 대한 간단한 글로벌 액세스를 제공해야 하는 경우 Singleton 패턴을 사용할 수 있다. 이번 예제에서는 심플하게 사용할 수 있는 예제를 ‘The Singleton Design Pattern - Part of the Gang of Four’ - IAmTimCorey 유튜브 강좌에서 참고하여 정리하여 보았다.

Program.cs
using System;

namespace ConsoleUI
{
    internal class Program
    {
        private static readonly TableServers Host1List = TableServers.GetTableServers();
        private static readonly TableServers Host2List = TableServers.GetTableServers();

        private static void Main()
        {
            for (var i = 0; i < 5; i++)
            {
                Host1GetNextServer();
                Host2GetNextServer();
            }
        }

        private static void Host1GetNextServer()
        {
            Console.WriteLine("Next Server 1 : " + Host1List.GetNextServer());
        }

        private static void Host2GetNextServer()
        {
            Console.WriteLine("Next Server 2 : " + Host2List.GetNextServer());
        }
    }
}
TableServers.cs
using System.Collections.Generic;

namespace ConsoleUI
{
    public class TableServers
    {
        private static readonly TableServers Instance = new TableServers();
        private readonly List<string> _servers = new List<string>();
        private int _nextServer;

        private TableServers()
        {
            _servers.Add("홍길동");
            _servers.Add("홍길서");
            _servers.Add("홍길남");
            _servers.Add("홍길북");
        }

        public static TableServers GetTableServers()
        {
            return Instance;
        }

        public string GetNextServer()
        {
            var output = _servers[_nextServer];
            _nextServer += 1;

            if (_nextServer >= _servers.Count)
            {
                _nextServer = 0;
            }

            return output;
        }
    }
}
Reference

Prεv(Θld)   Nεxt(Nεw)
Content
Search     RSS Feed     BY-NC-ND