0
0

FizzBuzzEnterpriseEditionが何をやっているのか超ざっくりと

Last updated at Posted at 2023-11-15

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でコーディングしました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0