Tipologia: Creazionale
Frequenza di utilizzo: Medio-Alta
Obiettivo: Assicurare che una classe abbia una sola istanza, garantendo un accesso globale ad essa
Componenti:
- Singleton: è il responsabile della creazione dell’istanza della classe, mantenendola univoca. Definisce l’operazione di accesso da parte del client per accedere alla creazione univoca dell’istanza
Implementazione in C#
Il core del design pattern singleton è rappresentato dall’unica classe dedicata alla creazione dell’istanza:
class LoadBalancer
{
//definizione instanza statica
private static readonly LoadBalancer _instance = new LoadBalancer();
private List<Server> _servers;
private Random _random = new Random();
private LoadBalancer()
{
_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()
{
return _instance;
}
public Server NextServer
{
get
{
int r = _random.Next(_servers.Count);
return _servers[r];
}
}
}
public class Server
{
public string Name { get; set; }
public string IP { get; set; }
}
}
La creazione dell’istanza è definita all’interno della classe in forma privata. Questo garantisce la creazione di un’istanza univoca. In C# le proprietà statiche vengono create immediatamente, al momento in cui la classe è caricata.
Per poter utilizzare questo patterns :
LoadBalancer b1 = LoadBalancer.GetLoadBalancer(); LoadBalancer b2 = LoadBalancer.GetLoadBalancer();
