diff --git a/src/StrategyPatternExample/IMathOperator.cs b/src/StrategyPatternExample/IMathOperator.cs index 7451c71..251d356 100644 --- a/src/StrategyPatternExample/IMathOperator.cs +++ b/src/StrategyPatternExample/IMathOperator.cs @@ -2,7 +2,7 @@ { public interface IMathOperator { - Operator Operator { get; } + bool IsApplicable(Operator op); int Calculate(int a, int b); } diff --git a/src/StrategyPatternExample/MathStrategy.cs b/src/StrategyPatternExample/MathStrategy.cs index ed864a9..f05f5f9 100644 --- a/src/StrategyPatternExample/MathStrategy.cs +++ b/src/StrategyPatternExample/MathStrategy.cs @@ -15,7 +15,15 @@ public MathStrategy(IEnumerable operators) public int Calculate(int a, int b, Operator op) { - return _operators.FirstOrDefault(x => x.Operator == op)?.Calculate(a, b) ?? throw new ArgumentNullException(nameof(op)); + foreach (var @operator in _operators) + { + if (@operator.IsApplicable(op)) + { + return @operator.Calculate(a, b); + } + } + + throw new ArgumentNullException(nameof(op)); } } } \ No newline at end of file diff --git a/src/StrategyPatternExample/Operators/AddOperator.cs b/src/StrategyPatternExample/Operators/AddOperator.cs index 1e127f1..8ce981f 100644 --- a/src/StrategyPatternExample/Operators/AddOperator.cs +++ b/src/StrategyPatternExample/Operators/AddOperator.cs @@ -2,7 +2,10 @@ { public class AddOperator : IMathOperator { - public Operator Operator => Operator.Add; + public bool IsApplicable(Operator op) + { + return op == Operator.Add; + } public int Calculate(int a, int b) => a + b; } diff --git a/src/StrategyPatternExample/Operators/DivideOperator.cs b/src/StrategyPatternExample/Operators/DivideOperator.cs index c428301..b0d2305 100644 --- a/src/StrategyPatternExample/Operators/DivideOperator.cs +++ b/src/StrategyPatternExample/Operators/DivideOperator.cs @@ -4,7 +4,10 @@ namespace StrategyPatternExample { public class DivideOperator : IMathOperator { - public Operator Operator => Operator.Divide; + public bool IsApplicable(Operator op) + { + return op == Operator.Divide; + } public int Calculate(int a, int b) { diff --git a/src/StrategyPatternExample/Operators/MultipleOperator.cs b/src/StrategyPatternExample/Operators/MultipleOperator.cs index 5b075ce..2282c1d 100644 --- a/src/StrategyPatternExample/Operators/MultipleOperator.cs +++ b/src/StrategyPatternExample/Operators/MultipleOperator.cs @@ -2,7 +2,10 @@ { public class MultipleOperator : IMathOperator { - public Operator Operator => Operator.Multiple; + public bool IsApplicable(Operator op) + { + return op == Operator.Multiple; + } public int Calculate(int a, int b) => a * b; } diff --git a/src/StrategyPatternExample/Operators/SubtractOperator.cs b/src/StrategyPatternExample/Operators/SubtractOperator.cs index dd5de7f..73dfe03 100644 --- a/src/StrategyPatternExample/Operators/SubtractOperator.cs +++ b/src/StrategyPatternExample/Operators/SubtractOperator.cs @@ -2,7 +2,10 @@ { public class SubtractOperator : IMathOperator { - public Operator Operator => Operator.Substract; + public bool IsApplicable(Operator op) + { + return op == Operator.Substract; + } public int Calculate(int a, int b) => a - b; } diff --git a/src/StrategyPatternExample/StrategyPatternExample.csproj b/src/StrategyPatternExample/StrategyPatternExample.csproj index 965e3b7..4c4f12a 100644 --- a/src/StrategyPatternExample/StrategyPatternExample.csproj +++ b/src/StrategyPatternExample/StrategyPatternExample.csproj @@ -9,7 +9,7 @@ - +