Singleton è uno schema comune implementato in entrambe le librerie native di .NET e Java. Lo vedrai come tale:
C #: MyClass.Instance
Java: MyClass.getInstance()
La domanda è: durante la scrittura delle API, è meglio esporre il singleton attraverso una proprietà o un getter, o dovrei nasconderlo il più possibile?
Ecco le alternative a scopo illustrativo:
Exposed (C #):
private static MyClass instance;
public static MyClass Instance
{
get {
if (instance == null)
instance = new MyClass();
return instance;
}
}
public void PerformOperation() { ... }
Nascosto (C #):
private static MyClass instance;
public static void PerformOperation()
{
if (instance == null)
{
instance = new MyClass();
}
...
}
Modifica Sembra esserci un numero di detrattori del design Singleton. Grande! Per favore dimmi perché e qual è l'alternativa migliore. Ecco il mio scenario:
Tutta la mia applicazione utilizza un logger (log4net / log4j). Ogni volta che il programma ha qualcosa da registrare, utilizza la classe Logger
(ad esempio Logger.Instance.Warn(...)
o Logger.Instance.Error(...)
ecc. Dovrei usare Logger.Warn(...)
o Logger.Warn(...)
invece?
Se hai un'alternativa ai singleton che rispondono alla mia preoccupazione, per favore scrivi una risposta per questo. Grazie:)