특정 클래스의 인스턴스 하나만 생성되도록 하고 전체 애플리케이션에 대해 해당 인스턴스에 대한 간단한 글로벌 액세스를 제공해야 하는 경우 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;
}
}
}