TASARIM KALIPLARI SERİSİ -1 SINGLETON
Merhabalar,
Tasarım kalıpları serimizin birinci yazısı Singleton ile yazılarımıza başlıyoruz. Singleton tasarım kalıbı "Oluşturucu" tip dediğimiz tasarım kalıplarından biridir. Kastımız bu yapıyı kullanarak istediğimiz bir sınıfın sadece tek bir örneğinin sistem üzerinde kullanılmasını zorlamaktır. Bunun anlamı uygulamamız yüklendiğinde hafıza ilgili sınıfa tek bir örnek olacak ve uygulama ihtiyaç duyduğunda tek bir adres üzerinden bu örneğe ulaşacak.
Tahmin ettiğiniz gibi hafıza teknik bir terimden bahsediyorsak bunun yazılımsal karşılığı "static" olacaktır. Aşağıda Singleton'ın kod bazında dökümü görülmektedir.
public class SingletonDemo {
private static volatile SingletonDemo instance = null;
private SingletonDemo() { }
public static SingletonDemo getInstance() {
if (instance == null) {
synchronized (SingletonDemo.class) {
if (instance == null) {
instance = new SingletonDemo();
}
}
}
return instance;
}
}
Görüldüğü üzere instance değişkeni static olarak tanımlanmıştır. getInstance metodunu incelediğimizde ilk iş olarak örneğinin null olup olmadığı kontrol edilmiştir. Alt satırda ise eğer örnek null ise "synchronized" edilerek thread lerden birinin diğerini ezerek olası çift instance oluşturma ihtimali engellenmektedir. Aksi takdirde ilk if ifadesini bir thread geçip durduğunda arkasından gelen bir başka thread örneği oluşturur. Duran thread tekrar aktif olursa bu sefer örnek tekrar oluşturulur ve ilk örnek ezilmiş olur.
Herkese Kolay Gelsin.
Tasarım kalıpları serimizin birinci yazısı Singleton ile yazılarımıza başlıyoruz. Singleton tasarım kalıbı "Oluşturucu" tip dediğimiz tasarım kalıplarından biridir. Kastımız bu yapıyı kullanarak istediğimiz bir sınıfın sadece tek bir örneğinin sistem üzerinde kullanılmasını zorlamaktır. Bunun anlamı uygulamamız yüklendiğinde hafıza ilgili sınıfa tek bir örnek olacak ve uygulama ihtiyaç duyduğunda tek bir adres üzerinden bu örneğe ulaşacak.
Tahmin ettiğiniz gibi hafıza teknik bir terimden bahsediyorsak bunun yazılımsal karşılığı "static" olacaktır. Aşağıda Singleton'ın kod bazında dökümü görülmektedir.
public class SingletonDemo {
private static volatile SingletonDemo instance = null;
private SingletonDemo() { }
public static SingletonDemo getInstance() {
if (instance == null) {
synchronized (SingletonDemo.class) {
if (instance == null) {
instance = new SingletonDemo();
}
}
}
return instance;
}
}
Görüldüğü üzere instance değişkeni static olarak tanımlanmıştır. getInstance metodunu incelediğimizde ilk iş olarak örneğinin null olup olmadığı kontrol edilmiştir. Alt satırda ise eğer örnek null ise "synchronized" edilerek thread lerden birinin diğerini ezerek olası çift instance oluşturma ihtimali engellenmektedir. Aksi takdirde ilk if ifadesini bir thread geçip durduğunda arkasından gelen bir başka thread örneği oluşturur. Duran thread tekrar aktif olursa bu sefer örnek tekrar oluşturulur ve ilk örnek ezilmiş olur.
Herkese Kolay Gelsin.
Yorumlar
Yorum Gönder