Tasarım desenleri yada tasarım şablonları olarak adlandırdığımız bu yapılar, usta yazılımcılar tarafından edinilen tecrübeler sonrası oluşmuş kalıplardır. Bu yapılar yazılımlarımızın daha performanslı olmasını ve okunabilirliğini sağlamaktadır. Bu tasarım desenlerinden ilk olarak Singleton tasarım şablonunu inceleyelim. Singleton tasarım deseni, program boyunca sadece bir yapının sadece bir tane nesnesi olmasını ve daha fazla oluşmasını engellemek amaçlı kullanılmaktadır. Singleton Tasarım Deseni genellikle cache, dosya işlemleri, veritabanı işlemleri gibi tek nesneye ihtiyaç duyulan ve program boyunca bu nesne üzerinden tüm işlemlerin yapılmasını sağlayan bir yapıdır. Aşağdaki örneğimizi inceleyelim.
Teoride bir Singleton sınıfında:
- Sınıfın tipine ait nesne 1 kere üretilmeli
- Yapıcı method(constructor) private yada protected belirteçleri sayesinde başka sınıflar tarafından nesnesinin oluşması engellenmelidir.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class Singleton { private static Singleton instance=null; private Singleton(){ System.out.println("Singleton oluştu!"); }// protected belirtecinide tanımlayabilirdik /* * yani Singleton singletonNesne1=new Singleton(); bunu yazmamız durumunda artık hata verecek * çünkü private yaptığımız için nesne oluşmasını engelledik. */ //getInstance metodu ile kontrollü bir şekilde nesne oluşturuyoruz. //daha önce oluştuysa nesne oluşmayacak. public static Singleton getInstance(){ if(instance==null){ instance=new Singleton(); } return instance; } } |
Evet sınıfımızı oluşturduk şimdi ise bu sınıfımzı test eden Test sınıfımızı oluşturalım. Aşağıda ki test sınıfında singletonNesne1 ve singletonNesne2 sınıflarına ait nesneler oluşturulmuş ve bu nesnelerin değerlerinin aynı olup olmadığı kontrol edilmektedir. Bu nesne getInstance metodu içersinde bir kere oluşturulduğu için “Singleton Oluştu!” çıktısını bir kere verecektir. Açıklama satırında ki kodun hata vermesinin sebebi yukarıda ki Singleton sınıfının yapıcı methodunu private ile gizleyerek dışarıdan erişilmesini engellememizdir.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Test { public static void main(String[] args) { Singleton singletonNesne1=Singleton.getInstance(); Singleton singletonNesne2=Singleton.getInstance(); //Singleton singletonNesne2=new Singleton(); //yukarıdaki kod hata verir. if(singletonNesne1==singletonNesne2) System.out.println("Nesneler Aynı!"); else System.out.println("Nesneler Farklı!"); } } |
Evet yukarıdaki Test sınıfımız ile SingletonDatabase sınıfına ait nesneye instance() metotu ile ulaşıp bu nesne üzerinden veri tabanı bağlantısını oluşturup gönderdik. Böylece yeni bir nesne oluşturup ve oluşturulan her yeni nesne için yeni bir bağlantı açmak zorunda kalmıyoruz.
İndirmek için: GitHub – Onur Arslan







