Tasarım şablonlarının önemini, ne olduğunu detaylarını uzun uzadıya anlatmadan görsel bir örnek yapacağımız bu yazıda, bununla ilgili bakmak istediğiniz her şeye buradan veya örnek olacak bir sayfa olarak buradan bakabilirsiniz. Tasarım şablonları ile ilgili çokça örnek görmüşsünüzdür, bazılarını uygulama fırsatınız olmuştur, bazılarını da kullanmışsınızdır haberiniz yoktur. Genel hayattan örnekler verilerek oluşturulan nesneleri incelediğinizde her şey mükemmel görünür ama iş uygulamaya geldiğinde bir projenin neresinde uygulayacağınız konusunda tereddüde düşebiliyorsunuz. Bu ilkokulda bir kelime öğrendiğinizde cümle içinde kullanmanın zorluğu gibidir.

Bu yazı dizisinde tasarım şablonlarını görsel bir yolda uygulanması ile inceleyeceğiz. İlk olarak Singleton tasarım şablonundan yola çıkarak başlayalım.

Aşağıdaki örnekte yapılanlar özet olarak şöyle;
Uygulamamız üzerinden bir form açılacak ve bu form Singleton kurallarına göre bir kere oluşturulacak bu yüzden ekranda tekrar tekrar açılamayacağı gibi form açılana kadar tekrar tıklama yapıldığında birden fazla oluşma durumu engellenecek.

/**
 * Bu formun ilk ve tek örneği açılmalı.
 * 
 * @author seruhatto
 */
public class SingletonForm extends JFrame {
 /**
  * static olarak formun örneğini tutmamız için değişkenimiz.
  */
 private static SingletonForm formInstance;

 /**
  * 
  * @param sira formun kaç kez oluştuğunun takibi için kullanalım.
  * @return oluşan form örneği geri dönecek.
  */
 public static SingletonForm getForm(int sira) {
  if (formInstance == null) {
   formInstance = new SingletonForm(sira);
  }
  return formInstance;
 }

 /**
  * Yapıcı bizim kontrolümüzde olması için dışardan erişime kapalı.
  */
 private SingletonForm(int sira) {
  setTitle(String.valueOf(sira));
  setBounds(30, 30, 300, 300);
  buFormunYapmasiGerekenler();
 }

 /**
  * bu formun oluşma sırasında yaptığı işlemler belli bir süre alacağını düşünelim.
  */
 private void buFormunYapmasiGerekenler() {
  try {
   Thread.sleep(2000);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }

}

 Bu formda singleton butonuna basıldığında formun açıldıktan sonra tekrar butona tıklandığında 1 numaralı form dışında bir form açılmaması için singleton tasarladık.
görüldüğü bu forma tıklandıktan sonra form açılınca tekrar butona basınca yeni bir form oluşturulmuyor 1 numaralı form dışında bir form oluşturulmuyor.
Ama formun açılması süre alıyor ve bu süre içerisinde tekrar tekrar tıklandığında gördüğünüz gibi 3 form açılmış.

Singleton üzerinde dikkat edilmesi gereken en önemli şey multi-thread uygulama üzerinde sınıf örneği oluşturulana kadar geçen sürede tekrar istek gönderilirse birden fazla oluşturulabilir. Bu yüzden yukarıdaki kodda şu şekilde bir düzenleme yapıyoruz.



/**
  * synchronized ile bu metota ulaşan ilk thread işi bitmeden diğer thread ulaşamayacak.
  * @param sira formun kaç kez oluştuğunun takibi için kullanalım.
  * @return oluşan form örneği geri dönecek.
  */
 public synchronized static SingletonForm getForm(int sira) {
  if (formInstance == null) {
   formInstance = new SingletonForm(sira);
  }
  return formInstance;
 }


* Kendim çalıştırmadan anlamam diyorsanız uygulama örneğini indirebilirsiniz.

Oracle ile çalışıyorsanız ve bir tablonuzdaki kayıtlar arasında anahtarlar ile ilişki varsa ve siz bu bağlı kayıtlar arasında kayboluyor ve arasından birini çekip almak için procedure içinde boğuluyorsan CONNECT BY tam sana göre Connect by detayları ile ilgili


  • A
    • A.1
      • A.1.1
        • A.1.1.1
      • A.1.2
        • A.1.2.1
  • B
    • B.1
      • B.1.1
        • B.1.1.1
      • B.1.2
        • B.1.2.1

Bu şekilde kayıt hiyerarşisi olan bir tablo üzerinden şu şekilde kayıtlara ihtiyaç olabilir.
  •  A kaydına ait hiyerarşinin detayları
SELECT T.ID,T.REF_ID,T.DEGER,LEVEL
  FROM KATALOG t
CONNECT BY PRIOR T.ID = T.REF_ID
 START WITH T.ID= 1

  •  A kaydına ait hiyerarşinin detaylarının 3. yaprakları
SELECT  t.ID ,t.ref_id,t.deger,LEVEL
  FROM KATALOG t
   where level =3
CONNECT BY  PRIOR T.ID= T.REF_ID
 START WITH T.DEGER='A'
  •  Herhangi bir hiyerarşi detayının kök kaydı
SELECT max(t.ID) kEEP(DENSE_RANK FIRST ORDER BY LEVEL DESC),

       max(t.REF_ID) kEEP(DENSE_RANK FIRST ORDER BY LEVEL DESC),
       max(t.DEGER) kEEP(DENSE_RANK FIRST ORDER BY LEVEL DESC) 
  FROM KATALOG t
CONNECT BY T.ID = PRIOR T.REF_ID
START WITH T.ID = 12


    About

    seruhatto