Skip to content

Instantly share code, notes, and snippets.

@gphan
Created October 19, 2012 23:04
Show Gist options
  • Save gphan/3921204 to your computer and use it in GitHub Desktop.
Save gphan/3921204 to your computer and use it in GitHub Desktop.
Over engineered "enterprisey" solution to the Fizz Buzz problem
import java.util.List;
import java.util.ArrayList;
interface NumberTest {
boolean testNumber(int number);
String numberTestString(int number);
}
class FizzTest implements NumberTest {
public boolean testNumber(int number) {
return number % 3 == 0;
}
public String numberTestString(int number) {
return "Fizz";
}
}
class BuzzTest implements NumberTest {
public boolean testNumber(int number) {
return number % 5 == 0;
}
public String numberTestString(int number) {
return "Buzz";
}
}
class FizzBuzzTest implements NumberTest {
public boolean testNumber(int number) {
return number % 15 == 0;
}
public String numberTestString(int number) {
return "FizzBuzz";
}
}
interface NumberTester {
void addNumberTest(NumberTest test);
void testNumbers(int[] numbers);
}
class LinearNumberTester implements NumberTester {
private List<NumberTest> testers = new ArrayList<NumberTest>();
public void addNumberTest(NumberTest test) {
this.testers.add(test);
}
public void testNumbers(int[] numbers) {
for (int number : numbers) {
boolean usedTest = false;
for (NumberTest test : testers) {
if (test.testNumber(number)) {
usedTest = true;
System.out.println(test.numberTestString(number));
break;
}
}
if (!usedTest) {
System.out.println(number);
}
}
}
}
class FizzBuzzTestModule {
public static void main(String[] args) {
NumberTester tester = new LinearNumberTester();
tester.addNumberTest(new FizzBuzzTest());
tester.addNumberTest(new FizzTest());
tester.addNumberTest(new BuzzTest());
int[] numbers = new int[100];
for (int i = 1; i <= numbers.length; i++) {
numbers[i - 1] = i;
}
tester.testNumbers(numbers);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment