戦略パターンに置き換えたい巨大な switch/case ステートメントがあります。各ステートメントには、特定のロジックを実行するコードの大きな平和があります。そのような場合にパターンを使用する良い例はありますか、またはこれに対する他の良い解決策はありますか?
私のソリューションソファー
class Context
{
private readonly List<CalculationUnit> _calculationsUnits;
public Context()
{
_calculationsUnits = new List<CalculationUnit>()
{
new CalculationUnitA("calc1"),
new CalculationUnitB("calc2"),
new CalculationUnitC("calc2")
};
}
public int Calculate(string name)
{
return (from c in _calculationsUnits where c.Name.Equals(name) select c.Calculate()).FirstOrDefault();
}
}
class CalculationUnit
{
public string Name { get; private set; }
public CalculationUnit(string name)
{
Name = name;
}
public virtual int Calculate()
{
return 0;
}
}
class CalculationUnitA : CalculationUnit
{
public CalculationUnitA(string name) : base(name) { }
public override int Calculate()
{
//calculations logic A
}
}
class CalculationUnitB : CalculationUnit
{
public CalculationUnitB(string name) : base(name) { }
public override int Calculate()
{
//calculations logic A
}
}
class CalculationUnitC : CalculationUnit
{
public CalculationUnitC(string name) : base(name) { }
public override int Calculate()
{
//calculations logic A
}
}
しかし、その後、各ロジックを実装する 50 個のクラスになってしまいます...
ありがとう