diff --git a/src/main/java/fizzbuzz/Buzzer.java b/src/main/java/fizzbuzz/Buzzer.java new file mode 100644 index 0000000..5817f22 --- /dev/null +++ b/src/main/java/fizzbuzz/Buzzer.java @@ -0,0 +1,11 @@ +package fizzbuzz; + +public class Buzzer implements Mutator { + @Override + public String mutate(int number, String prev) { + if (number % 7 == 0) { + return prev + "Buzz"; + } + return prev; + } +} \ No newline at end of file diff --git a/src/main/java/fizzbuzz/Fallback.java b/src/main/java/fizzbuzz/Fallback.java new file mode 100644 index 0000000..56c8af5 --- /dev/null +++ b/src/main/java/fizzbuzz/Fallback.java @@ -0,0 +1,11 @@ +package fizzbuzz; + +public class Fallback implements Mutator { + @Override + public String mutate(int number, String prev) { + if (prev == null || prev.isBlank()) { + return String.valueOf(number); + } + return prev; + } +} \ No newline at end of file diff --git a/src/main/java/fizzbuzz/FizzBuzz.java b/src/main/java/fizzbuzz/FizzBuzz.java index b0d8bea..d32843e 100644 --- a/src/main/java/fizzbuzz/FizzBuzz.java +++ b/src/main/java/fizzbuzz/FizzBuzz.java @@ -3,16 +3,27 @@ package fizzbuzz; +import java.util.*;; + public class FizzBuzz { + private final List mutators = new ArrayList<>(); + + public FizzBuzz() { + this(List.of(new Fizzer(), new Buzzer())); + } + + public FizzBuzz(List mutators) { + mutators.addAll(mutators); + mutators.add(new Fallback()); + } + public String translate(int number) { - if (((number % 5) == 0) && ((number % 7) == 0)) // A multiple of both? - return "FizzBuzz"; - else if ((number % 5) == 0) - return "Fizz"; // else a multiple of 5? - else if ((number % 7) == 0) - return "Buzz"; // else a multiple of 7? - else - return String.valueOf(number); // else just print it + String result = ""; + for (var mutator : mutators) { + result = mutator.mutate(number, result); + } + return result; } + } \ No newline at end of file diff --git a/src/main/java/fizzbuzz/Fizzer.java b/src/main/java/fizzbuzz/Fizzer.java new file mode 100644 index 0000000..3933dd8 --- /dev/null +++ b/src/main/java/fizzbuzz/Fizzer.java @@ -0,0 +1,11 @@ +package fizzbuzz; + +public class Fizzer implements Mutator { + @Override + public String mutate(int number, String prev) { + if (number % 5 == 0) { + return prev + "Fizz"; + } + return prev; + } +} \ No newline at end of file diff --git a/src/main/java/fizzbuzz/Mutator.java b/src/main/java/fizzbuzz/Mutator.java new file mode 100644 index 0000000..6174a62 --- /dev/null +++ b/src/main/java/fizzbuzz/Mutator.java @@ -0,0 +1,7 @@ +package fizzbuzz; + +public interface Mutator { + + String mutate(int number, String prev); + +} \ No newline at end of file