Yegâne (Singleton) tasarım şablonu, GoF ‘un(Gang Of Four) oluşturucu tasarım şablonlarından ilkidir. Bu şablonun amacı hazırlayacağınız sınıftan sadece bir nesne oluşmasını sağlamaktır. Bu sayede nesnenin kopyalanmasını yada yeni bir tane oluşturmasını engeller ve nesneye ihtiyaç duyulduğunda önceden oluşturulan nesneyi çağırır. Singleton tasarım şablonu, diğer tasarım şablonlarında da (Abstract Factory, Builder, Prototype, vs.) kullanılmaktadır. Core java sınıflarında kullanılır. Örneğin java.lang.Runtime, java.awt.Desktop
Bu şablonu uygulamak için yapılması gerekenler
- Sınıfın birden fazla nesne oluşturmasını engellemek. (private constructor ile)
- Sınıf içerisinde nesne oluşturan static bir sınıf değişkeni (private static variable)
- Sınıf içerisinde oluşan nesneyi döndüren public static bir metot. Bu işte dış dünyaya açılış noktasıdır.
Uygulama Çeşitleri
Singleton tasarım şablonunun çeşitli uygulama teknikleri vardır. Mesela Eager initialization, Singleton sınıfının nesnesi tam olarak class loading anında oluşturulur. Lazy initialization’ da nesne elde edilmek istenildiğinde nesne oluşturulur. Static block initialization’ da eager initialization’a benzerdir. Ancak, nesne oluşturulurken istisna oluşabilme durumlarında statik bloğun içinde oluşturulur. Diğer uygulama teknikleri içinde örnekler daha sonra yazacağım.
1. Eager Initialization
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class SingletonExample { private static final SingletonExample singleton = new SingletonExample(); private SingletonExample(){ } public static SingletonExample getInstance(){ return singleton; } } |
2. Static block initialization
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class SingletonExample2 { private static final SingletonExample2 singleton; private SingletonExample2(){ } static{ try { singleton = new SingletonExample2(); } catch (Exception e){ throw new RuntimeException("Nesne oluşturulurken bir hata oluştur"); } } public static SingletonExample2 getInstance(){ return singleton; } } |
3. Lazy Initialization
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class LazyInitSingletonExample { private static LazyInitSingletonExample instance; private LazyInitSingletonExample(){ } public static LazyInitSingletonExample getInstance(){ if(instance == null){ instance = new LazyInitSingletonExample(); } return instance; } } |
2 yorum yapıldı “Yegâne (Singleton) Tasarım Şablonu”