Strateji(Strategy) Tasarım Deseni

11-05-2014
Nedir?

Strateji(Strategy) tasarım deseni, behavioral tasarım desenlerinden biridir. Bir dizi algoritma tanımlar, bu algoritmaların erişimi için arayüz sağlar ve algoritmaları tanımlarken birbirlerinin yerine kullanılabilir özellikte tasarlar. Ayrıca client runtime zamanında dilediği algoritmayı seçebilir.

Ne zaman Kullanılır?

Belirli bir iş için birden çok algoritmaya(yönteme) sahip olduğumuzda kullanılır.
Nasıl Kullanılır?

Öncelikle bir algoritma interface'i oluşturulur .Daha sonra oluşturulan interface'i implement edecek algoritma sınıfları yaratılır. Context sınıfı yaratılır. Bu sınıf içerisinde algoritma interface türünden algoritmaların set edilmesi için bir metod bulunur. Bu metod sayesinde Context sınıfı algoritma nesnesini tutmuş olur. Son olarak bir Client sınıfı oluşturulur. Bu sınıf Context sınıfından ve algoritma sınıflardan nesneler üreterek işlemlerin yapılmasını sağlar

Faydaları Nedir?

Runtime zamanında özel bir işlem için tanımlanmış algoritmalardan dilediğimizi seçebiliriz.

Gerekenler

Türü interface olan Strategy sınıfı
En az iki tane somut Strategy sınıfı
Context sınıfı
Client sınıfı

Örnek Kullanım Alanları

1. java.util.Comparator#compare()
2. javax.servlet.http.HttpServlet, service() ve tüm doXXX() metodları
3. javax.servlet.Filter#doFilter()


Örnek Uygulama

/**
 * Strateji interface
 */
public interface Communicate {
    public void send();
}


/**
 * Somut algoritma sinifi
 */
public class Email implements Communicate {
    @Override
    public void send() {
        System.out.println("Email is send");
    }
}


/**
 * Somut algoritma sinifi
 */
public class Sms implements Communicate {
    @Override
    public void send() {
        System.out.println("Sms is send");
    }
}


/**
 * Context sinifi
 */
public class Context {
    private Communicate communicate;
  
    public void setCommunicate(Communicate communicate) {
        this.communicate = communicate;
    }
    public void sendInformation(){
        communicate.send();
    }
}


/**
 * Test sinifi
 */
public class Test {
    public static void main(String[] args) {
        Context context=new Context();
        context.setCommunicate(new Email());
        context.sendInformation();
        context.setCommunicate(new Sms());
        context.sendInformation();
    }
}


Uygulamamızın UML Diagramı




StratejiTasarım Deseni'nin Şematik Gösterimi

© 2019 Tüm Hakları Saklıdır. Codesenior.COM