using System.Collections.Generic;
public static void Main()
var proxy = new CalculatorProxy();
DoSomeRandomCalculations(proxy);
Console.WriteLine($"Operations: {proxy.ResultHistory.Count}\n");
Console.WriteLine("Results:");
foreach(var result in proxy.ResultHistory)
Console.WriteLine(result);
private static void DoSomeRandomCalculations(ICalculator calculator)
var random = new Random();
foreach(var _ in Enumerable.Range(0, random.Next(5, 15)))
var operation = random.Next(2);
var valueForOperation = random.Next(int.MaxValue);
calculator.Add(valueForOperation);
calculator.Subtract(valueForOperation);
public interface ICalculator
void Subtract(int value);
public class RealCalculator : ICalculator
public int Result { get; private set; }
public void Add(int value)
public void Subtract(int value)
public class CalculatorProxy : ICalculator
private readonly RealCalculator realCalculator;
this.realCalculator = new RealCalculator();
this.ResultHistory = new List<int>();
return this.realCalculator.Result;
public List<int> ResultHistory { get; }
public void Add(int value)
this.realCalculator.Add(value);
this.ResultHistory.Add(this.realCalculator.Result);
public void Subtract(int value)
this.realCalculator.Subtract(value);
this.ResultHistory.Add(this.realCalculator.Result);