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

Sorumluluk Zinciri ( Chain of Responsibility ) Tasarım Deseni

Bu tasarım deseni, bir dizi işlev sınıflarıyla, bu sınıfların işlevlerini başlatmak için gereken komut sınıflarından oluşur. İşlev sınıfları, ne tür işler yapacağını kendi bünyesinde tutar, ayrıca dizideki diğer bir işlev sınıfının ne olacağını da belirler. Bir işlemin, belli miktarda işlevlerden sırayla geçmesi gerektiğinde bu tasarım deseni kullanılabilir.

Örnek Uygulama

İşlev soyut sınıfının alt sınıfları olan İşlevA, İşlevB ve İşlevC sınıflarını zincirdeki tek bir işi yerine getiren zincirin halkaları olarak yorumlayabiliriz. Bu sınflardaki, "işleviYerineGetir" yordamı çağırılarak ilgili işlev yapılır. Bu yordam yapılacak zincirin nerede kullanılacağına bağlı olarak n tane değiştirge alabilir. Bu örnekte işlemVerisi isminde tek bir tane almıştır. İşlev sınıfındaki "sonrakiniAyarla" yordamı, zincirin bir halkasından sonra hangisinin geleceğini belirler. "çalıştır" yordamı ise, zincirin halkalarının sırayla çağrılmasını sağlayan yordamdır. Örnekteki, ZincirSınaması sınıfı, sistemi deneyen istemci sınıftır. Bu sınıfta örnek olarak iki tane zincir oluşturulup çalıştırılmış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.chainOfResponsibility;

/**
* İşlev.java
*
* Tarih bilgisi : May 24, 2014
*/
public abstract class İşlev {

 
protected İşlev  sonrakiİşlev;

 
protected İşlev sonrakiniAyarla( final İşlev sonraki ) {
   
sonrakiİşlev = sonraki;
   
return sonraki;
 
}

 
protected void çalıştır( final String işlemVerisi ) {

   
// İşlevi yerine getir.
   
işleviYerineGetir( işlemVerisi );

   
// Sonraki işlev boş değilse, ona geç.
   
if ( sonrakiİşlev != null ) {
     
sonrakiİşlev.çalıştır( işlemVerisi );
   
}
  }

 
protected abstract void işleviYerineGetir( String işlemVerisi );
}
/**
*
@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.chainOfResponsibility;

/**
* İşlevA.java
*
* Tarih bilgisi : May 24, 2014
*/
public class İşlevA extends İşlev {

 
@Override
 
protected void işleviYerineGetir( final String işlemVerisi ) {
   
System.out.println( "İşlev A yapıldı. Veri: " + işlemVerisi );
 
}
}
/**
*
@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.chainOfResponsibility;

/**
* İşlevA.java
*
* Tarih bilgisi : May 24, 2014
*/
public class İşlevB extends İşlev {

 
@Override
 
protected void işleviYerineGetir( final String işlemVerisi ) {
   
System.out.println( "İşlev B yapıldı. Veri: " + işlemVerisi );
 
}
}
/**
*
@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.chainOfResponsibility;

/**
* İşlevA.java
*
* Tarih bilgisi : May 24, 2014
*/
public class İşlevC extends İşlev {

 
@Override
 
protected void işleviYerineGetir( final String işlemVerisi ) {
   
System.out.println( "İşlev C yapıldı. Veri: " + işlemVerisi );
 
}
}
/**
*
@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.chainOfResponsibility;

/**
* ZincirSınaması.java
*
* Tarih bilgisi : May 24, 2014
*/
public class ZincirSınaması {

 
public static void main( final String[] args ) {

   
// Zincir nesneleri.
   
İşlev zincir1, zincir2, zincir;

   
// Zincir 1 i oluştur. A -> C -> B
   
zincir1 = new İşlevA();
    zincir = zincir1.sonrakiniAyarla
( new İşlevC() );
    zincir = zincir.sonrakiniAyarla
( new İşlevB() );

   
// Zincir 2 yi oluştur. C -> A
   
zincir2 = new İşlevC();
    zincir2.sonrakiniAyarla
( new İşlevA() );

   
// Zincir 1 i çalıştır.
   
zincir1.çalıştır( "veri1" );

   
// Zincir 2 yi çalıştır.
   
zincir2.çalıştır( "veri2" );
 
}
}
İşlev A yapıldı. Veri: veri1
İşlev C yapıldı. Veri: veri1
İşlev B yapıldı. Veri: veri1
İşlev C yapıldı. Veri: veri2
İşlev A yapıldı. Veri: veri2

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