public interface IFizzBuzzRule
string GetResult(int number);
class FizzRule : IFizzBuzzRule
public bool Check(int number) => number % 3 == 0;
public string GetResult(int number) => "Fizz";
class BuzzRule : IFizzBuzzRule
public bool Check(int number) => number % 5 == 0;
public string GetResult(int number) => "Buzz";
class FizzBuzzRule : IFizzBuzzRule
public bool Check(int number) => number % 3 == 0 && number % 5 == 0;
public string GetResult(int number) => "Fizz Buzz";
class DefaultRule : IFizzBuzzRule
public bool Check(int number) => true;
public string GetResult(int number) => number.ToString();
private readonly IFizzBuzzRule[] rules;
rules = new IFizzBuzzRule[]
public string GetResult(int number)
foreach (var rule in rules)
return rule.GetResult(number);
return number.ToString();
static void Main(string[] args)
FizzBuzz fizzBuzz = new FizzBuzz();
for (int i = 1; i <= 100; i++)
Console.WriteLine(fizzBuzz.GetResult(i));