static void Main(string[] args) { //Nem jó megoldások var service = new DataService(new AddressStrategyTestRepo()); //kérjük le, hogy hány e-mail-t küldtünk már eddig var count = service.GetSumEmailCount(); Console.WriteLine("E-mail-ek összes száma: {0}", count); /// - kérdezzük, hogy átlagosan hány e-mailt küldtünk egy-egy címzettnek var avg = service.GetAvgEmailCount(); Console.WriteLine("E-mail-ek átlagos száma: {0}", avg); Console.WriteLine(); count = service.Report(ReportType.Sum); Console.WriteLine("E-mail-ek összes száma: {0}", count); Console.WriteLine(); /// - kérdezzük, hogy átlagosan hány e-mailt küldtünk egy-egy címzettnek avg = service.Report(ReportType.Average); Console.WriteLine("E-mail-ek átlagos száma: {0}", avg); var service2 = new DataService2(new AddressStrategyTestRepo()); count = service2.Report(ReportType.Sum); Console.WriteLine("E-mail-ek összes száma (VIP): {0}", count); Console.WriteLine(); //nem jó megoldások vége //Jó megoldások: Stratégia minta ////////////////////////////////////////////////////////////////////////////////// var service3 = new DataService(new AddressStrategyTestRepo(), new SumStrategy()); //lehet ilyet implementálni, csak a null értékekre figyelni kell //service3.SetStrategy(new SumStrategy()); count = service3.ReportWithStrategy(); Console.WriteLine("E-mail-ek összes száma: {0}", count); Console.WriteLine(); //ilyet is lehetne implementálni, szintén a nullre figyelni //count = service3.ReportWithStrategy(new AvgStrategy()); ////////////////////////////////////////////////////////////////////// //A nehéztüzérség: .NET ///////////////////////////////////////////////////////////////////// Console.WriteLine("E-mail-ek összes száma: {0}", service.ReportWithDelegate( list => { var sum = 0; foreach (var addr in list) { sum += addr.EmailCount; } return(sum); } )); Console.WriteLine("E-mail-ek átlagos száma: {0}", service.ReportWithDelegate( list => (int)list.Average(x => x.EmailCount) //Ő a stratégiát leíró delegate )); Console.WriteLine(); Console.ReadLine(); }
static void Main(string[] args) { var service = new DataService(new AddressStrategyTestRepo()); #region nem jo megoldasok // - Kerjuk le, hogy hany email-t kuldtunk mar eddig var count = service.GetSumEmailCount(); Console.WriteLine($"Email-ek szama: {count}"); // - Kerjuk le, hogy atlagosan hany email-t kuldtunk egy-egy cimzettnek var avg = service.GetAvgEmailCount(); Console.WriteLine($"Atlagos email-ek szama: {avg}"); Console.WriteLine(); Console.WriteLine(); count = service.Report(ReportType.Sum); Console.WriteLine($"Email-ek szama: {count}"); avg = service.Report(ReportType.Average); Console.WriteLine($"Atlagos email-ek szama: {avg}"); Console.WriteLine(); Console.WriteLine(); var service2 = new DataService2(new AddressStrategyTestRepo()); count = service2.Report(ReportType.Average); //A ReportType-ot nem hasznalja az override-olt Report fgv (mindegy, hogy Sum vag Average) Console.WriteLine($"VIP email-ek szama: {count}"); Console.WriteLine(); Console.WriteLine(); #endregion //###################### Jo megoldasok ###################### //###################### 1. Strategia minta ###################### var service3 = new DataService(new AddressStrategyTestRepo(), new SumStrategy()); //lehet ilyet is csinalni, csak a null ertekere figyelni kell //service3.SetStrategy(new SumStrategy()); count = service3.ReportWithStrategy(); Console.WriteLine($"Email-ek szama - strategiaval: {count}"); Console.WriteLine(); //Ilyet is lehetne implementalni, szinten a null ertekere figyelni kell //avg = service3.ReportWithStrategy(new AvgStrategy()); var service4 = new DataService(new AddressStrategyTestRepo(), new AvgStrategy()); Console.WriteLine($"Email-ek atlagaos szama - strategiaval: {service4.ReportWithStrategy()}"); Console.WriteLine(); //#################### 2. A .NET megoldasa: delegate ######################## Console.WriteLine(); //A WriteLine ujabb formatumaval ( $"...") nem tudtam megadni... Talan nem szereti a sortorest. Console.WriteLine("Email-ek szama - delegate-tel: {0}", service.ReportWithDelegate( list => list.Sum(x => x.EmailCount) //Ez a strategiat leiro delegate )); Console.WriteLine("Email-ek atlagos szama - delegate-tel: {0}", service.ReportWithDelegate( list => //Ez a strategia mintat leiro delegate { avg = (int)Math.Round(list.Average(x => x.EmailCount)); return(avg); } )); Console.WriteLine(); Console.ReadLine(); }