💎Singleton
Bir sınıfın sadece bir örneği olmalıdır ve bu örneğe global bir erişim noktası sağlanmalıdır.

Desene ait yukarıdaki diyagrama bakacak olursak, örneğini istediğimiz sınıfın;
Constructor (oluşturucu metotu)
private
olmalıdır. Bunun amacı nesne oluşumunu tek yerden sağlamak. İstemcinin,new
anahtar kelimesini kullanması engellemektir.Static bir değişken
olmalıdır, referansı tutmak için.Tutulan referansa erişmek için bir metot olmalıdır,
getInstance()
C# Kod Örneği:
class Database
{
private static Database database;
private Database()
{
}
public static Database GetInstance()
{
if (database == null)
{
database = new Database();
}
return database;
}
}
Database firstInstanceRequest = Database.GetInstance();
Database secondInstanceRequest = Database.GetInstance();
firstInstanceRequest == secondInstanceRequest // true
Desenin yukarıdaki durumu geçerli gibi duruyor fakat multi-thread uygulamalarda nesnenin daha örneğinin oluşmadığı esnada if (database == null)
durumuna aynı anda birden fazla thread girebilir, bu sayede de o sınıfa ait birden fazla nesne örneği bulunur. Bu kısmı iyileştirme yolunda dillerin bize sağladığı yapıları kullanabiliriz. C# dilinde lock
ile JAVA dili için de synchronized
sayesinde aynı anda sadece bir yapının erişmesini sağlarız.
C# dili için GetInstance()
metotunu düzenleyecek olursak aşağıdaki hali alacaktır.
public class Database
{
private static Database database;
private static Object _lockObject = new object();
private Database()
{
}
public static Database GetInstance()
{
if (database == null)
{
lock (_lockObject)
{
if (database == null)
{
database = new Database();
}
}
}
return database;
}
}
Bu tasarım deseninin JAVA ve diğer diller için olan uygulamasını bu tasarım deseni için oluşturulmuş klasörde bulabilirsiniz.
Last updated