Strategy Tasarım Deseni Örnek
Bütün Kodlar
public enum DeveloperType
{
FrontEnd,
FullStack
}
public class YazilimciMaasRapor
{
public int Id { get; set; }
public string Adi { get; set; }
public DeveloperType Type { get; set; }
public int CalistigiSaat { get; set; }
public double SaatBasiUcret { get; set; }
public double MaasHesapla() => CalistigiSaat * SaatBasiUcret;
}
public interface IMaasHesapla
{
double ToplamMaasHesapla(IEnumerable<YazilimciMaasRapor> rapor);
}
public class FrontEndMaasHesapla : IMaasHesapla
{
public double ToplamMaasHesapla(IEnumerable<YazilimciMaasRapor> rapor) =>
rapor.Where(r => r.Type == DeveloperType.FrontEnd).Select(r => r.MaasHesapla()).Sum();
}
public class FullStackMaasHesapla : IMaasHesapla
{
public double ToplamMaasHesapla(IEnumerable<YazilimciMaasRapor> rapor) =>
rapor.Where(r => r.Type == DeveloperType.FullStack) .Select(r => r.MaasHesapla() * 1.2) .Sum();
}
public class SalaryCalculator
{
private IMaasHesapla _hesapla;
public SalaryCalculator(IMaasHesapla hesapla)
{
_hesapla = hesapla;
}
public void SetHesaplama(IMaasHesapla maasHesapla) => _hesapla = maasHesapla;
public double Hesapla(IEnumerable<YazilimciMaasRapor> raporlar) => _hesapla.ToplamMaasHesapla(raporlar);
}
class Program
{
static void Main(string[] args)
{
var reports = new List<YazilimciMaasRapor>
{
new YazilimciMaasRapor { Id = 2, Adi = “developer 1”, Type = DeveloperType.FrontEnd, SaatBasiUcret = 30, CalistigiSaat = 130 },
new YazilimciMaasRapor { Id = 4, Adi = “developer 2”, Type = DeveloperType.FullStack, SaatBasiUcret = 60, CalistigiSaat = 140 },
new YazilimciMaasRapor { Id = 1, Adi = “developer 3”, Type = DeveloperType.FrontEnd, SaatBasiUcret = 30, CalistigiSaat = 160 },
new YazilimciMaasRapor { Id = 5, Adi = “developer 4”, Type = DeveloperType.FullStack, SaatBasiUcret = 60, CalistigiSaat = 140 }
};
var hesapContext = new SalaryCalculator(new FrontEndMaasHesapla());
var frontEndToplam = hesapContext.Hesapla(reports);
Console.WriteLine($”FrontEnd Maaşı: {frontEndToplam}”);
hesapContext.SetHesaplama(new FullStackMaasHesapla());
var fulltackToplam = hesapContext.Hesapla(reports);
Console.WriteLine($”FullStack Maaşı: {fulltackToplam}”);
Console.WriteLine($”Toplam Maaş: {frontEndToplam + fulltackToplam}”);
Console.ReadLine();
}
}