using System.Collections.Generic;
namespace DoFactory.GangOfFour.Singleton.NETOptimized
LoadBalancer b1 = LoadBalancer.GetLoadBalancer();
LoadBalancer b2 = LoadBalancer.GetLoadBalancer();
LoadBalancer b3 = LoadBalancer.GetLoadBalancer();
LoadBalancer b4 = LoadBalancer.GetLoadBalancer();
if (b1 == b2 && b2 == b3 && b3 == b4)
Console.WriteLine("Same instance\n");
LoadBalancer balancer = LoadBalancer.GetLoadBalancer();
for (int i = 0; i < 15; i++)
string serverName = balancer.NextServer.Name;
Console.WriteLine("Dispatch request to: " + serverName);
sealed class LoadBalancer
private static readonly LoadBalancer _instance =
private List<Server> _servers;
private Random _random = new Random();
_servers = new List<Server>
new Server{ Name = "ServerI", IP = "120.14.220.18" },
new Server{ Name = "ServerII", IP = "120.14.220.19" },
new Server{ Name = "ServerIII", IP = "120.14.220.20" },
new Server{ Name = "ServerIV", IP = "120.14.220.21" },
new Server{ Name = "ServerV", IP = "120.14.220.22" },
public static LoadBalancer GetLoadBalancer()
int r = _random.Next(_servers.Count);
public string Name { get; set; }
public string IP { get; set; }