Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Design Pattern - Strategy



  May 03, 2019    Labels:,,,,,,,, 

Bildiğiniz gibi nesneye yönelik programlamanın amacı gerçek dünya nesnelerini yazılıma taşımaktır. Gerçek dünyada bir işlemi yapmak için genelde birden fazla yol vardır. Gerçek dünyada bazen sürekli aynı yolu kullanırken bazen duruma göre farklı yollar kullanabiliriz. Örneğin sabah işe giderken maliyeti düşünerek otobüs tercih edebiliriz ama eğer çok yağmur yağıyorsa o zaman taksiyle gitmek daha mantıklı olabilir. Yazılımda da kalıcı olarak değil duruma göre farklı yollarla bir işi yapmak için geliştirilmiş yöntem Strategy Pattern'ıdır. Bu patern ile bir işin farklı şekilde yapılabilmesi için uygun algoritmalar tasarlanır ve bu işi yapacak nesneler kendileri için uygun yöntemi seçerek işlemlerini gerçekleştirirler. Aynı zamanda bu patern ile sisteme yeni bir yöntem eklenmesi veya var olan bir yöntemin değiştirilmesinden bu yöntemleri kullanan nesneler etkilenmemektedirler. Çünkü yöntemleri kullanan nesneler işin nasıl olacağını bilmezler sadece kendilerine sunulan arayüz üzerinden işlemlerini gerçekleştirirler.

Uygulama
  • Yöntemlerimiz için genel bir arayüz sunacak Strategy soyut sınıfı veya arayüzü tanımlanır.
  • İşi yaptırmak isteyen nesne sadece bu arayüzü bilir ve kullanır.
  • Her bir yöntem için ayrı bir sınıf tanımlanır ve ortak arayüzü implement eder.








public interface Ulasim {
    
    public void git();
}

public class Otobus implements Ulasim {
    
    public void git() {
        System.out.println("Otobüs ile gidildi.");
    }
}

public class Taksi implements Ulasim {
    
    public void git() {
        System.out.println("Taksi ile gidildi.");
    }
}

public class IseGidis {
    private Ulasim ulasim;
    
    public void iseGit() {
        ulasim.git();
    }
}

public class Test {
    
    public static void main() {
        Ulasim otobus = new Otobus();
        Ulasim taksi = new Taksi();
        
        IseGidis iseGidis = new IseGidis();
        iseGidis.iseGit(otobus);
    }
}

No comments:

Post a Comment