Dacă ești programator probabil că "Best Practice" sau "Design Pattern" înseamnă ceva. De curând m-am apucat să citesc cartea "C# 3.0 Design Patterns". Am găsit multe patternuri interesante și chiar vă recomand să o citiți, însă nu am scris această însemnare pentru a vă recomanda cartea ci pentru a expune o idee excelentă de pattern.
Singleton generic.
Codul este extrem de simplu, la obiect, thread safe(f important) și generic(și mai important).
public class Singleton<T> where T: class, new()
{
Singleton() { }
class SingletonCreator
{
internal static readonly T instance = new T();
static SingletonCreator()
{
}
}
public static T UniqueInstance
{
get
{
return SingletonCreator.instance;
}
}
}
Cam ce știe să facă această clasă?
Știe să păstreze o singură instanță a unei clase. Mai bine vedem o clasă de test și un mod de folosire..
Clasa ce va fi instanțiată o singură dată:
public class TestClass
{
public string Mesaj
{
get;
set;
}
public TestClass()
{
Mesaj = "Initial";
}
}
Și o metodă de test.
public void TestUniqueInstance()
{
TestClass prima = Singleton<TestClass>.UniqueInstance;
Console.WriteLine(prima.Mesaj);
TestClass aDoua = Singleton<TestClass>.UniqueInstance;
prima.Mesaj = "Mesaj schimbat";
Console.WriteLine(aDoua.Mesaj);
}
De ce mi s-a părut atat de bună această implementare?
Pentru că este cu adevărat refolosibilă.
Pentru că nu folosește un test de genul instance == null ce ar fi însemnat că aceasă clasă nu ar mai fi thread safe(decât dacă s-ar fi folosit mecanisme de sincronizare).
Pentru că modul de instanțiere este lazy(leneș în română?), adică instanțierea instanței unice se face doar dacă este cerut acest lucru.
Notat cu 4.2 de 5 persoane
- Currently 4,2/5 Stars.
- 1
- 2
- 3
- 4
- 5