Mehmet Ethem SULAN :: Java Tasarım Şablonları :: Singleton Design Pattern Java Example(Tekil Tasarım Şablonun Java Kodu)
package www.ethemsulan.com;
public class SingletonSinifi {
//Bu siniftan sadece bu nesne tanimlanabilir
private static SingletonSinifi nesnem=null;
	private String degisken;
//Nesneye ayni adda erişimi engellemek için kilitleniyor
private static Object kilit=new Object();
//Yapici private yapilarak sadece bir nesne 
//turetilmesini saglayabiliriz.Yanı bir sınıftan bir nesne dışında nesne 
//tanımlamasını kısıtlamak için yapıcı private yapılır.
//Private yapılınca başka sınıftan new ile nesne türetemeyiz.
private SingletonSinifi(String degisken1){
		this.degisken=degisken1;
	}
//Bu sinifa ait nesneye bu metodla erisilir.Static olmak zorunda
//Bu tür işlemlerde static kavramı tam anlaşılmış olur
//Tek nesnemiz var ve başka yerden nesne türetemiyoruz.
//Buna erişmenin yolu static metodlardır.Çünkü nesne 
//üzerinden static lere erişilmiyor
public static SingletonSinifi degiskeniCagir(){
		//Nesne kullanılmıyor ve kiltledik.Başka threadin erişilmesini engelledik
if(nesnem==null){
//Eğer synchronized() olmasa sistemde birden fazla thread varsa
//Bu sınıftan birden fazla nesne türetilebilir.İçteki if ise 
//Köntrolu eline alan threadın daha önce
//nesneyi türetip türetmediğinin kontrolunu yapar.
//Java çoklu thread olduğundan sistemde birden fazla thread olabilir.			
	synchronized (kilit) {
		if(nesnem==null){
nesnem=new SingletonSinifi("Ethem");
				}
			}
		}
return nesnem;
	}
//Java multi thread ve single process tir.Çünkü jvm zaten bir process tir.
//Bir sistemde birden fazla süreç olamayıacağındak çoklu
 iş parçacığı 
//tekniği uygulanmış.Merak edilebilir neden java multi process değildir.
//Bu degiskeni çağıran metodumuzu yazalım
public void degeriYaz(){
		System.out.println(degisken);
	}
}
//Bu şekilde de olur ama tam kontrol sağlanılmıyor.
//Yukardaki şekilde kessinlikle ikinci bir nesne
//türetilemez.Ama bu şekilde üretilme imkanı var azda olsa.
//public static SingletonSinifi degiskeniCagir(){
//if(nenem==null){
//nesne=SingletonSinifi("Ethem");
//  }
//return nesnem;
//}

orj kod:http://www.ethemsulan.pastebin.com/8xhH3gvi

package www.ethemsulan.com;
public class TestSinifi {
public static void main(String[] args) {
//Sinifismi.StaticMetod(Nesne oluşturan metodumuz).normalMetodumuz
SingletonSinifi.degiskeniCagir().degeriYaz();
//Başka şekilde normal metodumuza erişemiyoruz.Tek nesnemiz var
//bu nesneyide degiskeniCagir() metodu oluşturuyor ve geriye o
//oluşturduğu nesneyi dönderir.
//yapıcı private olduğundan burada new ile nesne türetemeyiz.
		}
}

orj kod:http://www.ethemsulan.pastebin.com/mR63jRve

Bir sitemde bir sınıftan sadece bir nesne oluşturarak uygulama bopyunca kullanılmasını sağlamak için kullanılır.Yanı sınıftan ikinci bir nesne türetilememesi gereken durumlarda kullanılır.Bu nesneyi çağıran metodta static olmak zorunda.

Write a Comment

Let me know what you think?