Strateji ( Strategy ) Tasarım Deseni
Bir işlem için farklı yöntemlerin uygulanabilir olduğu durumlarda, bu yöntemi kullanacak olan nesne, hangi yöntemin uygulanacağını seçer. Çünkü bu içerik nesnesi, yöntemleri belirleyen üst sınıfı içerir. Farklı yöntem veya strateji alt sınıfları da, bu üst sınıftan türerler. Bu tasarım deseniyle, yöntemin nasıl uygulanması gerektiği ile ilgili detaylar, bu yöntemi kullanacak nesneden ayrılmış olur. Ayrıca bu tasarım deseninin kullanılmasıyla, kod uzun "if/else" veya "switch" ifadelerinden ayıklanır.
Örnek Uygulama
Örnekte BorçHesaplamaYöntemi sınıfı strateji üst sınıfıdır. Bu sınıf bir borç hesabının nasıl yapılması gerektiği yöntemini belirleyen üst sınıftır. Bu yöntemin detayını içeren ve bu sınıftan türeyen YöntemA ve YöntemB strateji sınıfları bulunmaktadır. BorçVerenKurum sınıfı içerik sınıfı olup, bir tane strateji sınıfını içerir. Bu sınıfın borç hesaplama yöntemini bu sınıf belirler. Müşteri sınıfı da, sistemi sınayan istemci nesnesidir.
- UML Sınıf Çizelgesi
- BorçHesaplamaYöntemi.java
- YöntemA.java
- YöntemB.java
- BorçVerenKurum.java
- Müşteri.java
- Ekran Çıktısı

/**
* @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.strategy;
/**
* BorçHesaplamaYöntemi.java
*
* Tarih bilgisi : May 24, 2014
*/
public interface BorçHesaplamaYöntemi {
void borçHesapla();
}
/**
* @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.strategy;
/**
* YöntemA.java
*
* Tarih bilgisi : May 24, 2014
*/
public class YöntemA implements BorçHesaplamaYöntemi {
@Override
public void borçHesapla() {
System.out.println( "A yöntemiyle borç hesaplandı." );
}
}
/**
* @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.strategy;
/**
* YöntemA.java
*
* Tarih bilgisi : May 24, 2014
*/
public class YöntemB implements BorçHesaplamaYöntemi {
@Override
public void borçHesapla() {
System.out.println( "B yöntemiyle borç hesaplandı." );
}
}
/**
* @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.strategy;
/**
* BorçVerenKurum.java
*
* Tarih bilgisi : May 24, 2014
*/
public class BorçVerenKurum {
private final BorçHesaplamaYöntemi yöntem;
public BorçVerenKurum( final BorçHesaplamaYöntemi yöntem ) {
this.yöntem = yöntem;
}
public void borçHesapla() {
yöntem.borçHesapla();
}
}
/**
* @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.strategy;
/**
* Müşteri.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Müşteri {
public static void main( final String[] args ) {
// İki farklı yöntem ile borç veren kurum nesneleri yaratıldı.
final BorçVerenKurum kurum1 = new BorçVerenKurum( new YöntemA() );
final BorçVerenKurum kurum2 = new BorçVerenKurum( new YöntemB() );
// Borç hesaplamaları çalıştırıldı.
kurum1.borçHesapla();
kurum2.borçHesapla();
}
}
B yöntemiyle borç hesaplandı.
Yorumlar
Yorum Yaz, Düşüncelerini Paylaş