Strategy Tasarım Kalıbı Nedir?



2 dakikalık okuma
July 23, 2019

Bazen bazı durumlarda bir işlemi yapmak için birden fazla yöntem kullanmamız gerekebilir. Örneğin maaş hesaplama programımız olsun ve bu program yabancı çalışanlar için farklı bir yöntem izlerken, yerli çalışanlar için de ondan daha farklı bir hesaplama yöntemi yapmış olsun. Biz tüm bunları bir sınıfa dahil ederek

function yabancıMaasHesapla($maas)
function yerliMaasHesapla($maas)

tarzında metodlar yazarsak bir çok yazılım prensibi kuralını ihlal etmiş oluruz. İşte bu durumlar için Strategy tasarım kalıbını kullanarak yazılım prensiplerini ihlal etmeden genişletilebilir, tekrar kullanılabilir, test edilebilir ve daha okunaklı bir kod yapısı orta çıkartmış oluruz.

Strategy tasarım kalıbı Behavioral dediğimiz birlikte belirli bir işi yerine getirmek için çeşitli sınıfların nasıl birlikte davranabileceğinin belirlenmesi kategori grubundadır.

Yukarıdaki senaryomuzu örneğe dökerek açıklamaya devam edelim:

İlk başta bir interface oluşturalım:

Interface Maas
{

    public function maasHesapla(int $maas): int;
}

Sonra bu interface’den YabanciMaas ve YerliMaas sınıflarımızı implement edelim. Sonrada hesaplama yöntem, katsayı vs. kodlayalım sınıf içinde aşağıdaki gibi:

Class YabanciMaas implements Maas
{

    public function maasHesapla(int $maas): int
    {

        return ($maas * 3);

    }
}

Class YerliMaas implements Maas
{

    public function maasHesapla(int $maas): int
    {
        return ($maas * 4);
    }
}

Şimdi de ana sınıfımızı yazalım:

Class MaasHesaplama
{

    private $maas;

    public function maasHesaplamaYontemi(Maas $maas)
    {
        $this->maas = $maas;

        return $this;
    }

    public function maasHesapla($maas)
    {
        return $this->maas->maasHesapla($maas);

    }
}

Kullanımı şu şekilde:

$maas = new MaasHesaplama();

echo $maas->maasHesaplamaYontemi(new YabanciMaas())
            ->maasHesapla(200);

echo $maas->maasHesaplamaYontemi(new YerliMaas())
            ->maasHesapla(200);

Etiketler: