Unity 3D: Singleton Design Pattern

Affrontiamo l’implementazione di un design pattern fondamentale della letteratura informatica: il Singleton.

L’implementazione sarà effettuata in Unity 3D, utilizzando il linguaggio C#.

Cos’è un singleton

Brevemente, il singleton  garantisce che una classe venga istanziata una e una sola volta in tutta l’esecuzione di un programma, accessibile da ogni punto del programma.

Implementazione

Per l’implementazione in C# si sfruttano i qualificatori static e public di una classe.

public class MySingleton : MonoBehaviour {
    // private fields
    private static MySingleton instance = null; // attenzione, i minuscola iniziale
 
    public bool MyBoolValue = true;
    //--------------------------------------------------
    // constructor field: Instance
    //--------------------------------------------------
    // Creates an instance of GamScreen if one does not exists
    //--------------------------------------------------
    // con la I maiuscola, indica il method
    public static MySingleton Instance {
        get {
            if (instance == null) {
                instance = new GameObject("MySingleton").AddComponent<MySingleton>();
            }
            return instance;
        }
    }
 
 
    //--------------------------------------------------
    // Unity method: OnApplicationQuit()
    //--------------------------------------------------
    // Called when you quit the application or stop the editor player
    //--------------------------------------------------
    public void OnApplicationQuit() {
        DestroyInstance();
    }
 
    //--------------------------------------------------
    // DestroyInstance()
    //--------------------------------------------------
    public void DestroyInstance() {
        Debug.Log("Screen Border Instance destroyed");
        instance = null;
    }
    //--------------------------------------------------
    // Initialize()
    //--------------------------------------------------
    public void Initialize() {
        Debug.Log("MySingleton initialized");
    }

    public void DoStuff() {
      Debug.Log("MySingleton stuff");
    }
    
}

Quindi per instanziare la prima volta il singleton sarà sufficente scrivere:

MySingleton.Instance.DoStuff();

e dopo quella riga di codice la classe sarà instanziata e accessibile da qualsiasi parte del programma.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *