GildedRose-Refactoring-Kata/csharpcore/GildedRose/DailyUpdaterFactory.cs
Sarah Ashri bdf20e735c Add new Conjured Items requirement and related tests
Also added some final notes on this solution and suggestions for further changes if we can change Item
2024-03-15 14:36:44 +10:00

45 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
namespace GildedRoseKata;
public class DailyUpdaterFactory
{
private readonly Dictionary<ItemType.ItemKey, DailyUpdater> _dailyUpdaters = new();
public DailyUpdater GetDailyUpdater(Item item)
{
if (ItemType.IsLegendaryItem(item))
{
return GetOrCreateDailyUpdater(ItemType.ItemKey.Legendary, () => new DailyUpdaterForLegendaryItems());
}
if (ItemType.IsBetterWithAgeItem(item))
{
return GetOrCreateDailyUpdater(ItemType.ItemKey.BetterWithAge, () => new DailyUpdaterForBetterWithAgeItems());
}
if(ItemType.IsBackstagePassesItem(item))
{
return GetOrCreateDailyUpdater(ItemType.ItemKey.BackstagePasses, () => new DailyUpdaterForBackstagePassesItems());
}
if (ItemType.IsConjuredItem(item))
{
return GetOrCreateDailyUpdater(ItemType.ItemKey.Conjured, () => new DailyUpdaterForConjuredItems());
}
return GetOrCreateDailyUpdater(ItemType.ItemKey.Regular, () => new DailyUpdaterForRegularItems());
}
private DailyUpdater GetOrCreateDailyUpdater(ItemType.ItemKey itemType, Func<DailyUpdater> createDailyUpdater)
{
if (!_dailyUpdaters.ContainsKey(itemType))
{
_dailyUpdaters.Add(itemType, createDailyUpdater());
}
return _dailyUpdaters[itemType];
}
}