FizzBuzzEnterpriseEdition
大体こんな感じ(多分)
実際はFactoryだとかがあったり(水増し用の)クラス、インターフェースが大量に作られているのでかなりカオス
import java.util.ArrayList;
import java.util.List;
interface IsEvenlyDivisibleStrategy {
boolean isEvenlyDivisible(int i);
}
class FizzStrategy implements IsEvenlyDivisibleStrategy {
public boolean isEvenlyDivisible(int i) {
return i % 3 == 0;
}
}
class BuzzStrategy implements IsEvenlyDivisibleStrategy {
public boolean isEvenlyDivisible(int i) {
return i % 5 == 0;
}
}
class NoFizzNoBuzzStrategy implements IsEvenlyDivisibleStrategy {
public boolean isEvenlyDivisible(int i) {
return i % 3 != 0 && i % 5 != 0;
}
}
interface DataPrinter {
public void printValue(Object value);
}
class FizzStringPrinter implements DataPrinter {
public void printValue(Object value) {
System.out.print("Fizz");
}
}
class BuzzStringPrinter implements DataPrinter {
public void printValue(Object value) {
System.out.print("Buzz");
}
}
class IntegerPrinter implements DataPrinter {
public void printValue(Object value) {
System.out.print(value);
}
}
class FizzBuzzOutputGenerationContext {
public IsEvenlyDivisibleStrategy strategy;
public DataPrinter printer;
public FizzBuzzOutputGenerationContext(IsEvenlyDivisibleStrategy strategy, DataPrinter printer) {
this.strategy = strategy;
this.printer = printer;
}
}
public class Main {
public static void main(String[] args) {
var contexts = new ArrayList<FizzBuzzOutputGenerationContext>();
contexts.add(new FizzBuzzOutputGenerationContext(new FizzStrategy(), new FizzStringPrinter()));
contexts.add(new FizzBuzzOutputGenerationContext(new BuzzStrategy(), new BuzzStringPrinter()));
contexts.add(new FizzBuzzOutputGenerationContext(new NoFizzNoBuzzStrategy(), new IntegerPrinter()));
fizzBuzz(contexts);
}
private static void fizzBuzz(List<FizzBuzzOutputGenerationContext> contexts) {
for (int i = 1; i <= 100; i++) {
for (FizzBuzzOutputGenerationContext context : contexts) {
if (context.strategy.isEvenlyDivisible(i)) {
context.printer.printValue(i);
}
}
System.out.println();
}
}
}
チラ裏
Javaの開発環境がローカルにないのでpaiza.ioでコーディングしました。