namespace MyCollections.Stats { public enum StatType { Attack, Defense, Health, Mana } public class Stats { private readonly BaseStats baseStats; private readonly StatsMediator mediator; public StatsMediator Mediator => mediator; public int Attack { get { Query query = new Query(StatType.Attack, baseStats.attack); mediator.PerformQuery(this, query); return (int)query.value; } } public int Defense { get { Query query = new Query(StatType.Defense, baseStats.defense); mediator.PerformQuery(this, query); return (int)query.value; } } public int Health { get { Query query = new Query(StatType.Health, baseStats.health); mediator.PerformQuery(this, query); return (int)query.value; } } public float Mana { get { Query query = new Query(StatType.Health, baseStats.mana); mediator.PerformQuery(this, query); return query.value; } } public Stats(StatsMediator mediator, BaseStats baseStats) { this.mediator = mediator; this.baseStats = baseStats; } //Debugging purposes public override string ToString() => $"Attack: {Attack}, Defende: {Defense}"; } }