public static void Main()
MacroCalculationStrategy strategy = new BottleCalculationStrategy();
Macro milk = new Macro(10, 5, 10, 300, strategy);
Console.WriteLine("Quantidade: {0}", milk.Quantity);
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Proteína: {0}", milk.Protein);
Console.WriteLine("Carbohidrato: {0}", milk.Carbohydrate);
Console.WriteLine("Gordura: {0}", milk.Fat);
public decimal Protein { get; set; }
public decimal Carbohydrate { get; set; }
public decimal Fat { get; set; }
public decimal Quantity { get; set; }
public MacroCalculationStrategy CalculationStrategy { get; set; }
public Macro(decimal protein, decimal carbohydrate, decimal fat, decimal quantity, MacroCalculationStrategy calculationStrategy) {
Protein = calculationStrategy.Calculate(quantity, protein);
Carbohydrate = calculationStrategy.Calculate(quantity, carbohydrate);
Fat = calculationStrategy.Calculate(quantity, fat);
public abstract class MacroCalculationStrategy {
public decimal Multiplier { get; set; }
public MacroCalculationStrategy(decimal multiplier){
public abstract decimal Calculate(decimal macro, decimal quantity);
public class GramsCalculationStrategy : MacroCalculationStrategy {
public GramsCalculationStrategy() : base (100) { }
public override decimal Calculate(decimal macro, decimal quantity) {
return (macro * quantity) / Multiplier;
public class BottleCalculationStrategy : MacroCalculationStrategy {
public BottleCalculationStrategy() : base (1) { }
public override decimal Calculate(decimal macro, decimal quantity) {
return (macro * quantity) / 1;