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!
Davranışsal Tasarım Desenleri

Kalıp Yordam ( Template Method ) Tasarım Deseni

Kalıp yordam, sınıf hiyerarşisinde üst sınıfta yer alır. Bu yordam gerekli yöntemin adımlarını belirler. Bu yöntemin hangi adımlardan oluşması gerektiğini ortaya koyarken, alt sınıfların uyması gereken şablonu ortaya koyar. Alt sınıflar detayları kendileri belirler. Fakat uyulması gereken yapı üst sınıf tarafından, kalıp yordam ile belirlenir. Bu tasarım deseni sayesinde alt sınıflarda yapılacak kod tekrarlarından kaçınılır. Alt sınıfların ortak kodları üst sınıfta tek bir yerde toplanır. Bu ortak kısımda bir değişikliğe ihtiyaç duyulduğunda, bu tek noktada yapılır. Kısaca üst sınıfta yer alan kalıp yordam, tüm alt sınıfların ihtiyaç duyduğu ortak adımları barındırır, bunlar için bir kalıp oluşturur ve detayları alt sınıflara bırakır.

Örnek Uygulama

Örnek olarak bir yemek şirketinin sistemi kurulmaktadır. Görevi yemek yapmak olan bu sistemdeki tüm yemeklerin, ilk önce malzemeleri hazırlanır, sonra pişirilir ve en son da servisleri yapılmaktadır. Bu adımlar ortak olduğu ve yemekler bazında detaylandığı için YemekYapıcı isminde bir üst sınıf oluşturulmuş ve bu ortak adımlar, "yemekYap" ismindeki bir kalıp yordamda toplanmıştır. Bu kalıp yordam diğer adım için gerekli yordamları çağırmıştır. Bu yordamlar soyut yapılmış ve bu sınıftan türeyen alt sınıflarda gerçekleştirilmeleri beklenmiştir. Sistemi kullanan YemekŞirketi sınıfı ise yemekleri bir dizi de toplamıştır. Dizi elemanı olarak da PilavYapıcı ve ÇorbaYapıcı alt sınıflarını vermiştir. Daha sonra dizi elemanlarının yemekYap "kalıp yordam" yordamlarını çağırarak, sistemi çalıştırmıştır.

/**
*
@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.templateMethod;

/**
* YemekYapıcı.java
*
* Tarih bilgisi : May 24, 2014
*/
public abstract class YemekYapıcı {

 
public void yemekYap() {
   
malzemeleriHazırla();
    pişir
();
    servisYap
();
 
}

 
protected abstract void malzemeleriHazırla();

 
protected abstract void pişir();

 
protected abstract void servisYap();
}
/**
*
@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.templateMethod;

/**
* ÇorbaYapıcı.java
*
* Tarih bilgisi : May 24, 2014
*/
public class ÇorbaYapıcı extends YemekYapıcı {

 
@Override
 
protected void malzemeleriHazırla() {
   
System.out.println( "çorba malzemeleri hazırlandı." );
 
}

 
@Override
 
protected void pişir() {
   
System.out.println( "çorba pişirildi." );
 
}

 
@Override
 
protected void servisYap() {
   
System.out.println( "çorba servis yapıldı." );
 
}
}
/**
*
@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.templateMethod;

/**
* PilavYapıcı.java
*
* Tarih bilgisi : May 24, 2014
*/
public class PilavYapıcı extends YemekYapıcı {

 
@Override
 
protected void malzemeleriHazırla() {
   
System.out.println( "pilav malzemeleri hazırlandı." );
 
}

 
@Override
 
protected void pişir() {
   
System.out.println( "pilav pişirildi." );
 
}

 
@Override
 
protected void servisYap() {
   
System.out.println( "pilav servis yapıldı." );
 
}
}
/**
*
@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.templateMethod;

/**
* YemekŞirketi.java
*
* Tarih bilgisi : May 24, 2014
*/
public class YemekŞirketi {

 
public static void main( final String[] args ) {
   
// Yemek yapıcılar oluşturuldu.
   
final YemekYapıcı[] yemekYapıcılar = new YemekYapıcı[ 2 ];
    yemekYapıcılar
[ 0 ] = new ÇorbaYapıcı();
    yemekYapıcılar
[ 1 ] = new PilavYapıcı();

   
// Yemekler yapıldı.
   
for ( final YemekYapıcı yemekYapıcı : yemekYapıcılar ) {
     
yemekYapıcı.yemekYap();
   
}
  }
}
çorba malzemeleri hazırlandı.
çorba pişirildi.
çorba servis yapıldı.
pilav malzemeleri hazırlandı.
pilav pişirildi.
pilav servis yapıldı.

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