Il modello di design singleton è un modello di design ampiamente usato nella programmazione orientata agli oggetti in quanto assicura che venga creata una sola istanza di classe e per accedervi fornisce un punto di accesso globale. Ciò significa che ogni richiesta per un'istanza della classe restituisce la stessa istanza, piuttosto che crearne una nuova.
Singleton Design Pattern in C#
Il modello Singleton è noto per la sua semplicità ed efficacia nel garantire che vi sia solo un'istanza della classe, rendendolo una scelta popolare per molti sviluppatori di software. Il modello Singleton viene spesso utilizzato per garantire che esista un unico punto di accesso in una risorsa o servizio condivisa, ecco la sintassi per l'utilizzo:
Classe pubblica sigillata
statico privato readonlyistanza = new ();
privato()
statico pubblicoEsempio
Ottenere
istanza di ritorno;
La parola chiave sigillata viene utilizzata per evitare che la classe venga ereditata e il campo di istanza è contrassegnato come lettura solo per assicurarsi che possa essere inizializzata solo una volta, ed è inizializzata alla dichiarazione con una singola istanza della classe. Il costruttore è contrassegnato come privato per prevenire l'istanza esterna della classe e la proprietà dell'istanza fornisce un modo per accedere alla singola istanza della classe ed è contrassegnato come statico in modo che sia accessibile senza creare un'istanza della classe.
In C# un modello singleton è in genere implementato utilizzando un costruttore privato, un campo di istanza statica e una proprietà o un metodo statico pubblico per accedere all'istanza. L'idea di base è quella di garantire che solo un'istanza della classe possa esistere controllando il modo in cui è istanziata e accessibile, ecco un codice di esempio che dimostra la creazione e l'uso del modello di design singleton in C#:
usando il sistema;
// Definisci la classe di calcolatrice con un costruttore privato e un campo di istanza statica
Calcolatore di classe sigillata pubblica
istanza di calcolatrice statica privata;
Private Calculator () // Il costruttore privato impedisce l'istanziazione della classe di calcolatrice dall'esterno della classe stessa
// Definisci la proprietà dell'istanza, che crea un nuovo oggetto calcolatore se non esiste già e la restituisce
istanza di calcolatrice statica pubblica
Ottenere
if (istanza == null) // Verifica se è già stato creato un oggetto calcolatore
istanza = new Calculator (); // In caso contrario, crea un nuovo oggetto calcolatore e assegnalo al campo di istanza
istanza di ritorno;
public int add (int x, int y)
restituire x + y;
// Definisci il metodo di sottrazione, che sottrae un numero intero da un altro e restituisce il risultato
public int sottract (int x, int y)
restituire x - y;
// Definisci la classe di programma con un metodo principale
Programma di classe
statico void main (string [] args)
Calcolatrice calcing = calcolatrice.Esempio; // Ottieni un'istanza dell'oggetto calcolatore utilizzando la proprietà dell'istanza
int risultato1 = calc.Aggiungi (5, 7); // Usa il metodo Aggiungi per aggiungere 5 e 7 insieme
Console.WriteLine ($ "Result1: risultato1"); // output Il risultato dell'aggiunta alla console
int risultato2 = calc.Sottrarre (10, 3); // Usa il metodo di sottrazione per sottrarre 3 da 10
Console.WriteLine ($ "Result2: risultato2"); // Output Il risultato della sottrazione alla console
In questo esempio, la classe di calcolatrice è definita con un costruttore privato e un campo di istanza statica. Il costruttore privato impedisce alla classe di essere istanziata dall'esterno della classe stessa, mentre il campo di istanza statica assicura che solo un'istanza della classe possa esistere alla volta.
La classe di calcolatrice include anche una proprietà di istanza, che crea un nuovo oggetto calcolatore se non esiste già e la restituisce. La prima volta che viene chiamata la proprietà dell'istanza, crea un nuovo oggetto calcolatore e lo assegna al campo di istanza, eventuali chiamate successive alla proprietà dell'istanza restituiscono semplicemente l'oggetto calcolatore esistente.
La classe di calcolatrice include anche metodi ADD e sottrai, che eseguono operazioni aritmetiche di base e restituiscono il risultato. Questi metodi sono semplicemente inclusi come esempio del tipo di funzionalità che la classe di calcolatrice potrebbe fornire.
Infine, la classe Programma include un metodo principale, che crea un'istanza della classe di calcolatrice utilizzando la proprietà istanza e utilizza i metodi ADD e SOTTRAT per eseguire alcuni semplici calcoli. I risultati di questi calcoli vengono quindi usciti alla console usando la console.Metodo Writeline.
Se tentiamo di creare una nuova istanza della classe Calcolatrice utilizzando il costruttore predefinito. Questo non funzionerà perché il costruttore della classe di calcolatrice è privato, il che impedisce di creare nuovi casi al di fuori della classe.
Per dimostrare ho creato una nuova istanza della classe di calcolatrice utilizzando la proprietà istanza della classe e nell'output si verificherà un errore che afferma che questa classe è inaccessibile a causa del suo livello di protezione:
Dimostrando che le nuove istanze sono respinte dal modello Singleton in C#, questo esempio mostra come il modello Singleton garantisce che una sola istanza di classe sia creata e mantenuta in tutto il programma.
Conclusione
Il modello Singleton viene spesso utilizzato in situazioni in cui un singolo oggetto deve coordinare le azioni attraverso il sistema, come un servizio di registrazione o una connessione di database. Il modello è implementato utilizzando un costruttore privato e una proprietà statica che restituisce una singola istanza della classe, questo articolo fornisce una spiegazione dettagliata su questo modello.