Strateji

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 :

Ö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.

Örnek Sınıf Çizelgesi :

Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )

BorçHesaplamaYöntemi.java :

public interface BorçHesaplamaYöntemi {

void borçHesapla();

}

YöntemA.java :

public class YöntemA implements BorçHesaplamaYöntemi {


@Override

public void borçHesapla() {

System.out.println( "A yöntemiyle borç hesaplandı." );

}

}

YöntemB.java :

public class YöntemB implements BorçHesaplamaYöntemi {


@Override

public void borçHesapla() {

System.out.println( "B yöntemiyle borç hesaplandı." );

}

}

BorçVerenKurum.java :

public class BorçVerenKurum {

private BorçHesaplamaYöntemi yöntem;


public BorçVerenKurum( BorçHesaplamaYöntemi yöntem ) {

this.yöntem = yöntem;

}


public void borçHesapla() {

yöntem.borçHesapla();

}

}

Müşteri.java :

public class Müşteri {


public static void main(String[] args) {

BorçVerenKurum kurum1 = new BorçVerenKurum( new YöntemA() );

BorçVerenKurum kurum2 = new BorçVerenKurum( new YöntemB() );


kurum1.borçHesapla();

kurum2.borçHesapla();

}

}