Design pattern

in C#, Informatica, Programmazione

Design Patterns – Singleton

Tipologia: Creazionale

Frequenza di utilizzo: Medio-Alta

Obiettivo: Assicurare che una classe abbia una sola istanza, garantendo un accesso globale ad essa

Design Patterns - Singleton

Schema UML – Singleton

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();