Practice in OOP for thoughtworks quiz FizzBuzzWhizz.
NumberSequenceSayer numberSequenceSayer = NumberSequenceSayerBuilder.custom()
.setNumberSayer(
or(contains(3).thenReturn("Fizz"))
.or(
concat(
mod(3).is(0).thenReturn("Fizz"),
mod(5).is(0).thenReturn("Buzz"),
mod(7).is(0).thenReturn("Whizz")
)
)
.or(echoInputNumber())
)
.setStartNumber(1).setEndNumber(100).get();
System.out.println(numberSequenceSayer.say());A strategy to say a number. Can be composite to CompositeNumberSayer and OrNumberSayer.
public interface NumberSayer {
/**
* Say a number
* @param number
* @return
*/
public String say(int number);
}Entire flow of numbers.
public class NumberSequenceSayer {
private final NumberSayer numberSayer;
private final int startNumber;
private final int endNumber;
private static String SEPARATOR = System.getProperty("line.separator");
public NumberSequenceSayer(NumberSayer numberSayer, int startNumber, int endNumber) {
this.numberSayer = numberSayer;
this.startNumber = startNumber;
this.endNumber = endNumber;
}
public String say() {
StringBuilder accum = new StringBuilder();
for (int i = startNumber; i <= endNumber; i++) {
String say = numberSayer.say(i);
if (say != null) {
accum.append(say).append(SEPARATOR);
}
}
return accum.toString();
}
}Detail in blog: