using csharp.StrategyPatternExample.Strategy; using System; using System.Collections.Generic; namespace csharp.StrategyPatternExample { class CategoryStrategiesFactory { #region Variables static private CategoryStrategiesFactory _strategiesFactory = null; #endregion #region Constructor private CategoryStrategiesFactory() { } #endregion #region Methods public static CategoryStrategiesFactory GetInstance() { if (_strategiesFactory == null) { _strategiesFactory = new CategoryStrategiesFactory(); } return _strategiesFactory; } public List GetCategoryStrategies(Item item) { List listCategoryStrategies = new List(); if (item.Name == Global.NAME_ITEM_AGED_BRIE) { listCategoryStrategies = new List() { new OlderIsBetterStrategy() }; } else if (item.Name == Global.NAME_ITEM_BACKSTAGE_PASSES) { listCategoryStrategies = new List() { new CloseExpiredImproveQualityStrategy(new List() { new CloseExpiredImproveQualityStrategy.NextExpiredCondition() { SellInLimit = 5, Increment = 3 }, new CloseExpiredImproveQualityStrategy.NextExpiredCondition() { SellInLimit = 10, Increment = 2 } }) }; } else if (item.Name == Global.NAME_ITEM_SULFURAS) { listCategoryStrategies = new List() { }; } else if (item.Name == Global.NAME_ITEM_CONJURED) { listCategoryStrategies = new List() { new TwiceFastDegradeQualityStrategy() }; } else { listCategoryStrategies = new List() { new NormalDegradeStrategy() }; } return listCategoryStrategies; } #endregion } }