Tasarım Desenleri
Nesneye Dayalı Programlamada Sınıf İlişkileri Nasıl Olmalı?
Testçiler sizin düşmanınız değildir. Esas düşman yazılım hatalarıdır!
Yaratıcı Tasarım Desenleri

Kurucu ( Builder ) Tasarım Deseni

Bu tasarım deseni ile bir nesneyi, bir sınıfı, aşama aşama farklı özellikleri ile oluşturabiliriz. Nesneyi farklı özellikler ile oluşturmaya yarayan bu sınıfa Kurucu nesne ismi verilir. Kurucu nesneden farklı özelliklerde alt sınıflar da türeyebilir. Kurucunun oluşturduğu nesneye ihtiyaç duyan istemci sınıf, istediği özelliklerde nesneyi oluşturabilecek kurucu oluşturur ve kurucuya istediği nesnenin oluşması için isteklerde bulunur. En sonunda da bu nesneyi alır ve kullanır. İstemci böylece nesne yaratma sorumluluğunu kurucu nesneye bırakmış olur. Tabi her basit nesnenin, bir de kurucusunu oluşturmaya gerek yoktur. Kurucu nesne genelde, içinde çok özellik barındıran, karmaşık nesnelerin oluşumunda görev alması daha yerindedir.

Örnek Uygulama

Örnek uygulamada, yaratılacak nesne Pide nesnesidir. Pide sınıfının kurucusu, PideKurucusu ismindeki sınıftır. Pide kurucusu, Lahmacun ve KuşbaşılıPide şeklinde iki çeşittir. İstemci nesne yani Aşçı, Pide sınıfının yaratılma sorumluluğunu PideKurucu kurucu sınıfına bırakmıştır. Pide kurucusu, "malzemeKur", "hamurKur" ve "baharatKur" yordamları ile nesnenin kademe kademe kurulumuna ve yeni özellikler kazanmasına imkan kılar. Örnekte PideSalonu nesnesi, kurucusunu "LahmacunPideKurucu" olarak seçer ve bunu Aşçı sınıfına geçer. Aşçı kademe kademe nesneyi ( Pide ) yi oluşturur ve istemciye geri döner.

/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/

package com.ilkerkonar.td.desen.ornekkodlar.builder;

/**
* Pide.java
*
* Tarih bilgisi : May 15, 2014
*/
public class Pide {

  
private String   malzeme   = "";
  
private String   hamur   = "";
  
private String   baharat   = "";

  
public void malzemeKoy( final String malzeme ) {
     
this.malzeme = malzeme;
  
}

  
public void hamurKoy( final String hamur ) {
     
this.hamur = hamur;
  
}

  
public void baharatKoy( final String baharat ) {
     
this.baharat = baharat;
  
}

  
@Override
  
public String toString() {
     
return "Pide [malzeme=" + malzeme + ", hamur=" + hamur + ", baharat=" + baharat + "]";
  
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.builder;

/**
* PideKurucu.java
*
* Tarih bilgisi : May 15, 2014
*/
public abstract class PideKurucu {

  
protected Pide   pide;

  
public void pideYarat() {
     
pide = new Pide();
  
}

  
public Pide pideAl() {
     
return pide;
  
}

  
public abstract void malzemeKur();

  
public abstract void hamurKur();

  
public abstract void baharatKur();
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.builder;

/**
* LahmacunPideKurucu.java
*
* Tarih bilgisi : May 15, 2014
*/
public class LahmacunPideKurucu extends PideKurucu {

  
@Override
  
public void baharatKur() {
     
pide.baharatKoy( "acı biber" );
  
}

  
@Override
  
public void hamurKur() {
     
pide.hamurKoy( "ince hamur" );
  
}

  
@Override
  
public void malzemeKur() {
     
pide.malzemeKoy( "kıyma" );
  
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/

package com.ilkerkonar.td.desen.ornekkodlar.builder;

/**
* KuşbaşılıPideKurucu.java
*
* Tarih bilgisi : May 15, 2014
*/
public class KuşbaşılıPideKurucu extends PideKurucu {

  
@Override
  
public void baharatKur() {
     
pide.baharatKoy( "kimyon" );
  
}

  
@Override
  
public void hamurKur() {
     
pide.hamurKoy( "kalın hamur" );
  
}

  
@Override
  
public void malzemeKur() {
     
pide.malzemeKoy( "kuşbaşı et" );
  
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.builder;

/**
* Aşçı.java
*
* Tarih bilgisi : May 15, 2014
*/
public class Aşçı {

  
private PideKurucu   pideKurucu;

  
public void pideKurucuAta( final PideKurucu pideKurucu ) {
     
this.pideKurucu = pideKurucu;
  
}

  
public Pide pideAl() {
     
return pideKurucu.pideAl();
  
}

  
public void pideyiKur() {
     
// Pideyi aşama aşama kur.
     
pideKurucu.pideYarat();
      pideKurucu.hamurKur
();
      pideKurucu.malzemeKur
();
      pideKurucu.baharatKur
();
  
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/

package com.ilkerkonar.td.desen.ornekkodlar.builder;

/**
* PideSalonu.java
*
* Tarih bilgisi : May 15, 2014
*/
public class PideSalonu {

  
public static void main( final String[] args ) {
     
// Yönetici sınıfı yarat.
     
final Aşçı aşçı = new Aşçı();

     
// Kurulum nesnesini yarat.
     
final LahmacunPideKurucu lahmacunPideKurucu = new LahmacunPideKurucu();

     
// Yönetici sınıfa kurulum nesnesini ver.
     
aşçı.pideKurucuAta( lahmacunPideKurucu );

     
// Ürün nesnesini kur.
     
aşçı.pideyiKur();

     
// Pide kuruldu ve ürün hazır.
     
final Pide pide = aşçı.pideAl();

      System.out.println
( "Pide kuruldu : " + pide );
  
}
}
Pide kuruldu : Pide [malzeme=kıyma, hamur=ince hamur, baharat=acı biber]

Yorumlar

Henüz bu sayfa için bir yorum yapılmamıştır.

Yorum Yaz, Düşüncelerini Paylaş

Not: Zorunlu alanlar yıldız (*) ile belirtilmiştir.

Kişisel Bilgiler

E-posta adresiniz kimse ile paylaşılmayacaktır. Gerekli olduğunda sizinle iletişim sağlamak için kullanılacaktır.

Yorum Alanı
Giriş Kontrol


Tüm java kodları "jdk1.7.0_09" ile derlenmiş ve çalıştırılmıştır.

Tüm hakları saklıdır. ©  "İlker KONAR" | İletişim: bilgi@tasarimdesenleri.com