Java Design Patterns (Tasarım Sablonları-Desenleri)- Singleton Pattern

Posted by & filed under .

Design Pattern Nedir?

Christoper Alexander üstadımız şöyle demiş. “Her pattern(desen) çevremizde sürekli tekrar eden bir problemi ve asıl çözümün yolunu tanımlar.Bu oyle bir yoldur ki, bu çözümü bir milyondan fazla da kullansanız,hiçbir zaman iki kere  aynı yolu kullanmamış olursunuz.”Bu arada bu Cristopher abimiz “Design Patterns” olgusunu ilk kurgulayan insandır.

Yazılım tasarım örüntüleri, yazılım tasarımı sırasında sıkça karşılaşılan, birbirine benzer sorunları çözmek için geliştirilmiş ve işlerliği kanıtlanmış genel çözüm önerileridir. Genel olarak yazılım tasarım örüntüleri programlama dillerinden bağımsız olarak tanımlansalar da,  dillerine uygun yazılım tasarım örüntüleri daha çok bilinir. Bu örüntüler,  arasındaki ilişkileri ve etkilişimleri gösterirler. Programcı bir tasarım örüntüsünü elindeki soruna bakarak özelleştirip kullanabilir.

Eger cok iyi bir yazılımcı olursan , belki şirinleri göremezsin ama , sende bir design pattern oluşturabilirsin.Peki bir design pattern oluşturabilmek için 4 gerekli şey nedir?

1-)Önce bir isim bulacaksın.Buldugun isim problem ile yaptıgın işin arasındaki yol ismi olabilir.Ornegin Proxy gibi.

2-)Bir Problemin olacak. Bu problem buldugun Pattern’in ne zaman kullanacagını belirleyecek.

3-)Bir cozumün olacak . Bu çözüm ilişkileriyle topluluklarıyla ve sorumluklarıyla saglam bir çözüm sunacak.

4-)Bir de sonucun olacak. Buldugun patternin ulaştıgı bir sonuc olmalı.

Alıntı  :http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf

Şimdi gelelim Singleton Patterne.

Nedir bu singleton pattern?

Singleton tasarım deseni, sınıftan örnek oluşturma (“instantiation”) işlemini kısıtlayan, ve sınıftan çalıştırma süresince uygulama genelinde sadece bir örneğin oluşturulmasını sağlayan bir yöntemdir. Bir sınıfın uygulama çapında tek bir örneğinin çalışmasını istiyorsanız ve bu örneğin oluşturulmasını sınırlamak istiyorsanız bu tasarım desenini kullanmanız gerekir.

Bu tasarım deseni gerçekleştirilirken yapılması gereken, sınıfın herhangi bir örneği (“instance”) yoksa bu örneği yaratmaktır. Bunu sağlayabilmek için bu yaratma işlemini kontrol altına almak gereklidir. Bu nedenle yapıcıların dışarıdan erişime kapatılması (Java’da private olarak tanımlama) ve yaratma işlemi için ayrı bir erişilebilir metotun tanımlanması gerekir. Bu tanımlanan metot içerisinde statik olarak saklanan örneğin daha önce yaratılıp yaratılmadığı kontrol edilerek, gerekiyorsa yaratılarak isteyen sınıf döndürülmesi gerekir.

Aşağıdaki resimde bir Singleton nesnesinin sınıf diagramı olarak gösterimini görebilirsiniz:

Singleton Sınıf Diyagramı

Bu kodda dikkat edilmesi gereken nokta , kurucu metodun Private tanımlanmış olmasıdır. Bu sebeple aynı nesneden new ile iki defa üretilmesini engellemiş oluyoruz.Ardından tanımladıgımız static degiskene ait bir metod tanımlayıp , ufak bir kontrol ile daha önce oluşturulup oluşmadıgını kontrol ediyoruz. Main içerisinde cagirdigimizda görecegimiz şey , nesnenin sadece bir kez üretildigidir.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package singletonbir;


/**
*
* @author Mete
*/
public class SingletonSinifi {
private static SingletonSinifi SingletonNesnemiz=null;

public static SingletonSinifi SingletonNesnemiz(){
if(SingletonNesnemiz==null){
SingletonNesnemiz=new SingletonSinifi();
System.out.println("ben singleton bir nesneyim.sadece bir kere üretilirim.öyle de şekilim ha.");

}
return SingletonNesnemiz;
}
public static void main(String[] args) {
// TODO code application logic here
System.out.println(SingletonSinifi.SingletonNesnemiz());
System.out.println(SingletonSinifi.SingletonNesnemiz());
System.out.println(SingletonSinifi.SingletonNesnemiz());
}

}

One Response to “Java Design Patterns (Tasarım Sablonları-Desenleri)- Singleton Pattern”

  1. ömer